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 = ... изменить значения. как только вы уверены в логике.

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

Другие вопросы по тегам