MYSQL:Looking для эквивалента “regex” Perl = ~ s/e/i/g => rigix в MySQL Select

У меня также был бы подобный ответ, моя единственная модификация должна была добавить, где пункт, чтобы не иметь пустые строки (где C пуст):

listOfA.SelectMany( a => a.AList, (a, b) => b.C ).Where( c => c.Length > 0 );
5
задан Community 23 May 2017 в 11:48
поделиться

2 ответа

В 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

Общее правило манипуляций со строками / обработки на уровне базы данных: Сохраняйте простоту. РСУБД мыслят наборами, и в этом они сияют. Вытягивание отдельных струнных манипуляций не для них. Таким образом, ни одна СУБД не имеет действительно зрелых функций обработки строк (и, конечно же, нет никакой согласованности между разными). Если ваше регулярное выражение достаточно сложное,

5
ответ дан 14 December 2019 в 08:56
поделиться

Нет, не можете. MySQL поддерживает регулярные выражения только для сопоставления ( RLIKE ), но не для замены.

2
ответ дан 14 December 2019 в 08:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: