MySQL: REGEXP для удаления части записи

У меня есть таблица "locales" со столбцом "имя". Записи в имени всегда начинаются с ряда символов, за которыми следует символ подчеркивания (например, "foo_", "bar_"...). Запись может иметь более одного подчеркивания, и шаблон перед подчеркиванием может повторяться (например, "foo_bar_", "foo_foo_").

Как с помощью простого запроса я могу избавиться от всего, что находится перед первым символом подчеркивания, включая сам первый символ подчеркивания? Я знаю, как это сделать в PHP, но не могу понять, как это сделать в MySQL.


person Adrien Hingert    schedule 24.08.2011    source источник


Ответы (2)


SELECT LOCATE('_', 'foo_bar_') ... даст вам расположение первого подчеркивания, а SUBSTR('foo_bar_', LOCATE('_', 'foo_bar_')) даст вам подстроку, начинающуюся с первого подчеркивания. Если вы хотите избавиться и от этого, увеличьте значение locate на единицу.

Если теперь вы хотите заменить значения в самих таблицах, вы можете сделать это с помощью оператора обновления, такого как UPDATE table SET column = SUBSTR(column, LOCATE('_', column)).

person Lars    schedule 24.08.2011

MySQL REGEX могут только сопоставлять данные, они не могут выполнять замену. Вам нужно будет выполнить замену на стороне клиента в вашем PHP-скрипте или использовать стандартные строковые операции в MySQL для внесения изменений.

UPDATE sometable SET somefield=RIGHT(LENGTH(somefield) - LOCATE('_', somefield));

Вероятно, там есть некоторые ошибки, но это основной способ сделать это.

person Marc B    schedule 24.08.2011