В MySQL нет способа заменить что-либо регулярным выражением. Вы можете сопоставить в MySQL на основе RegEx (regexp
), но это не возвращает то, какая часть соответствует, только весь столбец, который есть. Но вы можете использовать replace
примерно так:
select replace(col, 'e', 'i') from tbl
Это вернет regex
как rigix
.
Что касается вашего конкретного примера, вам придется использовать комбинацию locate
и substring
:
select
substring(col
, locate('_', col)+1
, locate('_', reverse(col))-(len(col)-locate('_', col)-1))
from tbl
Общее правило для обработки / обработки строк на уровне базы данных: не усложняйте. СУРБД думают в наборах, и именно там они сияют. Вытягивать отдельные струнные манипуляции не в их сладком месте. Таким образом, ни одна СУБД не имеет действительно зрелых функций обработки строк (и, разумеется, между ними нет никакой согласованности). Если ваше регулярное выражение достаточно сложное, вы, скорее всего, захотите просто обработать его на уровне представления / приложения, а не в базе данных.