Запрос с регулярным выражением

Yura123

Новичок
Запрос с регулярным выражением

Требуется запросом UPDATE прочесать строки и заменить в одном столбце кусок строки, расположенный в начале, на другой.
Например, есть в базе строки вида:

001002001001
001002001002
001002001003

Нужно заменить 001002 в начале строки на 002002, чтобы получилось

002002001001
002002001002
002002001003
 

Yura123

Новичок
Там я был.
Вы в тему вникли?
Нужно заменить кусок только в начале строки.
Я знаю, как выбрать нужные строки.
Но, если нужно заменить 001002 на 002002, то обычный REPLACE заменит их везде.
Тогда вторая строчка в примере будет выглядеть 002002002002, но мне нужен только кусок из начала строки.
 

baev

‹°°¬•
Команда форума
Там я был.
Вы в тему вникли?
Нужно заменить кусок только в начале строки.
Мда...
Оттуда:

В регулярном выражении могут использоваться любые специальные символы/структуры из числа приведенных ниже:

^

Соответствие началу строки.

mysql> SELECT "fo\nfo" REGEXP "^fo$"; -> 0
mysql> SELECT "fofo" REGEXP "^fo"; -> 1
-- и что непонятно?
 

Steamroller

Новичок
В update в качестве нового значения можно использовать выражение со значением столбцов текущей строки.
Т. е. что-то вроде
update table1 set col1 = concat('002002', substring(col1,7));
 

Yura123

Новичок
Спасибо, Steamroller
2 baev: читайте внимательно.
Мне нужны регулярные выражения в заменах, а не в селектах.
Покажите мне, как сделать

UPDATE table SET id = REPLACE(id, 'РЕГУЛЯРНОЕ_ВЫРАЖЕНИЕ', 'НОВОЕ_ЗНАЧЕНИЕ') WHERE id LIKE '001002%'
 

Steamroller

Новичок
Полноценной замены по регулярному выражению никак не сделать. Только конструировать что-то с помощью substring, locate, concat и т. п.
 

baev

‹°°¬•
Команда форума
2 baev: читайте внимательно.
Мне нужны регулярные выражения в заменах, а не в селектах.
Ну-ну...

Вы просто сами не знаете, что Вам нужно.

Ладно, чтоб не флудить, пользуйтесь:
Код:
UPDATE table SET field=INSERT(field, 1, 6, "002002") WHERE field REGEXP "^001002"
 

clevel

Новичок
возникла аналогичная ситуация: есть строковое поле в таблице, в котором представлены такие данные 1,2,3,4,5,6,

Необходимо удалить , например 1,3 и 6, чтобы осталось 2,4,5,
В регулярном выражении это бы выглядело так:
[^\d](1|3|6),
однако в мане не нашел ничего похожего, а вынести в функцию substring не получится, так как:
1. раздувается количество вложенных substring пропорционально кол-ву удаляемых чисел.
2. если есть число 11, а надо удалить 1, то в результате удалится не полностью..

на пхп выносить тоже не хочется, так как очень трудоемкая будет операция.

Вопрос - есть ли выход решить данную проблему малой кровью с помощью мускуля?
 
Сверху