2010-12-14 4 views
0

У меня есть строковый столбец (Col1) в таблице (Tab1). Я хочу написать сценарий, который удаляет символы '%' или '&' из строковых значений.SQL update column дважды

Выбрать, для этого является следующее:

SELECT REPLACE(Tab1.Col1, '&', ''), 
     REPLACE(Tab1.Col1, '%', '') 
FROM Table1 Tab1 
WHERE Tab1.Col1 like '%[&]%' 
     OR Tab1.Col1 like '%[%]%' 

ли это кажется правильным? Если это так, как я могу преобразовать это в любой оператор обновления? Я попытался следующие:

UPDATE Tab1 
SET Tab1.Col1 = REPLACE(Tab1.Col1, '&', ''), 
    Tab1.Col1 = REPLACE (Tab1.Col1, '%', '') 
FROM Table1 Tab1 
WHERE Tab1.Col1 like '%[&]%' 
     OR Tab1.Col1 like '%[%]%' 

Это не работает, как вы не можете обновить колонку дважды в SET. Есть ли другой способ, которым я могу это сделать? Я знаю, что я, наверное, делаю что-то глупое, поэтому извиняюсь за свое невежество.

Заранее спасибо.

ответ

5

Это должно сработать. Replace возвращает строку, которую вы можете снова передать другой функции замены.

UPDATE Tab1 
    SET Tab1.Col1 = REPLACE(REPLACE(Tab1.Col1, '&', ''), '%', '') 
    FROM Table1 Tab1 
    WHERE Tab1.Col1 like '%[&]%' OR Tab1.Col1 like '%[%]%' 
1
UPDATE Tab1 
SET Tab1.Col1 = REPLACE(REPLACE(Tab1.Col1, '&', ''), '%', '') 
FROM Table1 Tab1 
WHERE Tab1.Col1 like '%[&]%' 
    OR Tab1.Col1 like '%[%]%' 
0

Как вы не говорите, что RDBMS вы используете, я избегаю вещи, которые, очевидно, не переносимы:

UPDATE Tab1 
SET Tab1.Col1 = REPLACE(REPLACE(Tab1.Col1, '&', ''), '%', '') 
WHERE Tab1.Col1 <> REPLACE(REPLACE(Tab1.Col1, '&', ''), '%', ''); 
+0

«Я избегать вещей, которые, очевидно, не -portable "- erm, стандартный SQL использует' <> ', а не'! = '. – onedaywhen

+0

@onedaywhen 'SQL Standard' <> 'Portable', но вы [правы] (http://stackoverflow.com/questions/723195/should-i-use-or-for-not-equal-in-tsql/723426 # 723426) :) – 2010-12-14 13:13:19

Смежные вопросы