Задать вопрос

SQL UPDATE с регулярными выражениями

Есть в таблице строки вида '123abc', '123bcd'.
В них нужно замнить часть строки (например, '123') на другую строку (например '345'), но так, чтоб вторая часть осталась на месте. И это одним запросом на много-много строк.
Т.е. регулярка выглядела бы так:

var input = '123abc';
var replaceText = '345$1';
var RegExp = new RegExp(/123(.*)/);
var Result = input.replace(RegExp, replaceText);

а как это сделать в апдейтах SQL?
Хотелось бы решение, работающее во всех базах (т.е. на стандартном sql), но на крайняк пойдет решения для Postgres.

Спасибо
  • Вопрос задан
  • 9643 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 1
Shedal
@Shedal
Если нужно универсально, и чтобы заменяло только первые три символа, то можно выкрутиться вот так:

UPDATE table
SET field = CONCAT('456', SUBSTRING(field, 4))
WHERE field LIKE '123%';


Но опять же, это только если заменять нужно точно известную подстроку.
Есил заменять нужно в середине, тоже можно выкрутиться с помощью SUBSTRING_INDEX() или LOCATE().
Между прочим, решение без регулярок будет быстрее, чем с ними, и, к тому же, универсальнее. А следовательнее, его лучше предпочесть, если это возможно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Shedal
@Shedal
Вот так дложно работать везде:

UPDATE table SET field = REPLACE(field, '123', '456');

А если нужны именно регулярки, то в Postgres же вроде бы есть regexp_replace.
Ответ написан
@himik
UPDATE table
SET field = replace(field, '123', '456')
WHERE field LIKE '123%';
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы