2016-11-28 5 views
0

У меня есть требование в sql, где мне нужно изменить имя столбца XYZ. В этой колонке я хочу заменить каждое появление 27007 PT. Например, если значение столбца составляет 2700702, тогда новое значение должно быть PT02. Как я могу это получить?Невозможно заменить подстроку новой подстрокой

+4

'заменить (XYZ, '27007', 'PT')'? – jarlh

+1

Вы попробовали 'replace (XYZ, '27007', 'PT')'? –

+0

Спасибо, что помогает. Я волновался, так как за 27007 может следовать любое количество персонажей. Это будет работать отлично –

ответ

0

Это необходимо изменить значение в таблице:

update t 
    set xyz = replace(xyz, '27007', 'PT') 
    where xyz like '%27007%'; 
+0

В этом случае лучше не иметь условие WHERE. Пусть двигатель ищет строку «27007» и заменяет ее всякий раз, когда она найдена. При условии WHERE строка будет искать в каждой строке в любом случае, и всякий раз, когда будет найдено совпадение, функция REPLACE будет искать ее снова, умножая работу. – mathguy

+3

Без условия WHERE все строки будут обновляться. С условием WHERE будут обновляться только строки, содержащие '27007'. – vav

+0

REPLACE заменяет все совпадения. Поэтому, если строка «27007027007», она будет преобразована в «PT0PT». Если это не то, что вы хотите, вам нужно использовать комбинацию substr/instr или regexp_replace. – vav