Regexp_replace сталкивается с немецкими умлаутами ü, ö, ä

Пишу макрос в dbt с SQL для очистки имён. Я изящно хотел поставить первую букву имени выше, но мой

regexp_replace('(\w)(\w*)', x -> upper(x[1]) || lower(x[2])

сталкивается с немецкими умляутами ä, ö, ü

Так, например, фамилия schöneberger с моим выражением регулярного выражения сверху становится SchöNeberger, а не Schöneberger.

Кто-нибудь знает, что написать, чтобы я мог использовать умлауты и для Шёнебергера, и для других имен?

Это вопрос, связанный с языком SQL? Какие СУБД вы используете?

jarlh 25.01.2023 10:32

Да, это связано с SQL. Я использую дбт.

DataVE 25.01.2023 10:36

jarlh спрашивал, что это за база данных? То, что вы поделились, очень странный синтаксис для regexp_replace()

tconbeer 25.01.2023 18:26

Данные хранятся в AWS Athena.

DataVE 26.01.2023 08:09

Вам нужно будет настроить регулярное выражение, чтобы добавить юникод для умлаутов. Вот такой вопрос, надеюсь, он поможет: stackoverflow.com/questions/22017723/regex-for-umlaut

Aleix CC 26.01.2023 11:36
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
5
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Athena использует синтаксис Trino, который использует синтаксис регулярных выражений Java. Java поддерживает расширенные классы символов, использующие свойства Unicode из Perl, включая \p{L}, который по сути представляет собой «любую букву Unicode». Итак, это будет работать для вас:

regexp_replace(name_col, '(\p{L})(\p{L}*)', x -> upper(x[1]) || lower(x[2]))

Доказательство: https://regex101.com/r/N84wjS/2

Другие вопросы по теме