Sql запрос UPDATE replace где ошибка?

Рейтинг: 0Ответов: 1Опубликовано: 25.03.2015

Есть таблица, которая хранит в себе id и param.

Параметры хранятся в виде:

[p1=>1][p2=>2][p3=>3]...

Задача обновить в таблице t все значения параметра р1.

Делаю запрос:

UPDATE t SET param = replace(param,'\[p1=>\w+[a-zA-Z0-9_]\]', '[p1=>333]')

Но запрос не срабатывает.

В чём ошибка, подскажите, пожалуйста.

Ответы

▲ 1

где ошибка?

Это один из тех вопросов, ответ на который очевиден и очень прост: в архитектуре БД.

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

Разумеется, вот этот вот - не побоюсь этого слова - чудовищный формат, [p1=>1][p2=>2][p3=>3] должен быть немедленно нормализован, и вместо единственного поля под него долна быть отдана целая таблица вида

id | p  | value
12 | p1 | 1
12 | p2 | 2
12 | p3 | 3

где id - это уникальный идентификатор из старой таблицы с чудовищным полем.

как можно себе представить, редактирование параметров в такой таблице не представляет ни малейшей трудности.

Тем более, что REPLACE все равно не поддерживает регулярки, уж не знаю, откуда эта идея изначально у автора взялась.