У меня также был бы подобный ответ, моя единственная модификация должна была добавить, где пункт, чтобы не иметь пустые строки (где C пуст):
listOfA.SelectMany( a => a.AList, (a, b) => b.C ).Where( c => c.Length > 0 );
В 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
Общее правило манипуляций со строками / обработки на уровне базы данных: Сохраняйте простоту. РСУБД мыслят наборами, и в этом они сияют. Вытягивание отдельных струнных манипуляций не для них. Таким образом, ни одна СУБД не имеет действительно зрелых функций обработки строк (и, конечно же, нет никакой согласованности между разными). Если ваше регулярное выражение достаточно сложное,
Нет, не можете. MySQL поддерживает регулярные выражения только для сопоставления ( RLIKE
), но не для замены.