Вы можете использовать границы слова класс символов.
Как указано в документации , начиная с версии 8.0.4. Регулярные выражения MySQL полагаются на нотацию ICU (InternationalКомпоненты для Unicode), где границы слова выражаются как \b
.В более ранних версиях использовалась реализация Спенсера, и границы представлялись как [[:<:]]
(перед словом) и [[:>:]]
(после слова).
SELECT REGEXP_REPLACE(
name,
'(a|o|e|y|cy|dzy|rzy|owie|i|u|ów|owi|em)\\b',
''
)
FROM `zp_poster`
Демонстрация на DB Fiddle :
WITH t AS (
SELECT 'Józefowi Piłsudski' name
UNION ALL SELECT 'Piłsudski Józefowi'
)
SELECT
name,
REGEXP_REPLACE(
name,
'(a|o|e|y|cy|dzy|rzy|owie|i|u|ów|owi|em)\\b',
''
) replaced
FROM t;
| name | replaced |
| ------------------ | -------------- |
| Józefowi Piłsudski | Józef Piłsudsk |
| Piłsudski Józefowi | Piłsudsk Józef |