MySQL REPLACE строка с регулярным выражением
У меня есть таблица с около 50000 записей. Одним из полей является "загруженное" поле, состоящее из переменного числа параметров от 1 до 800. Мне нужно заменить все параметры на 0. Пример:
1 параметр 3,45 должен стать 0,00
2 параметра 2,27^11,03 должны стать 0,00 ^ 0,00
3 параметра 809,11 ^ 0,12^3334,25 должны стать 0,00 ^ 0,00 ^ 0,00
и так далее.
На самом деле мне нужно заменить что-нибудь между ^ на 0,00 (для 1 параметра это должно быть просто 0,00 без ^).
Или мне нужно как-то посчитать число ^, сгенерировать строку, например, 0,00 ^ 0,00 ^ 0,00... и заменить ее. Единственный доступный инструмент - MySqlWorkbench.
Буду признателен за любую помощь.
1 ответ
В MySQL нет встроенной возможности замены регулярных выражений.
Однако вы можете достичь своей цели, выполнив то, что вы предложили - подсчитав количество ^
и создание строки значений замены, с этим:
TRIM(TRAILING '^' FROM REPEAT('0.00^',(LENGTH(column) - LENGTH(REPLACE(column,'^','')) + 1)));
Изнутри наружу мы вычисляем количество значений, подсчитывая количество разделителей и добавляя 1 к этому количеству. Мы рассчитываем разделители, сравнивая длину исходной строки с длиной той же строки с разделителями, удаленными с использованием REPLACE(...,'^','')
заменить каждый ^
ни с чем.
REPEAT()
Функция строит строку, повторяя строковое выражение n раз.
Это приводит к ложному ^
в конце строки, которую мы удаляем достаточно легко TRIM(TRAILING '^' FROM ...)
,
SELECT t1.*,
... выражение выше... FROM table_name t1
, из вашей таблицы, чтобы проверить результаты этой логики (замена column
с фактическим названием столбца), то вы можете UPDATE table SET column = ...
изменить значения. как только вы уверены в логике.
Обратите внимание, конечно, что это свидетельствует о проблемной структуре базы данных. Каждый столбец должен содержать одно атомарное значение, а не "список" значений, как кажется из этого вопроса.