#sql #regex #string #snowflake-cloud-data-platform
#sql #регулярное выражение #строка #snowflake-cloud-data-platform
Вопрос:
Я пытаюсь выполнить преобразование регистра в snowflake, используя REGEXP_REPLACE
, однако, похоже, что он не поддерживает соответствующую escape-последовательность.
Пример: я хотел бы взять hello_world
и заставить его сказать Hello_World
Я пробовал:
SELECT REGEXP_REPLACE('hello_world', '(^[a-z]|_[a-z])', '\U\1', 1, 0, 'c');
Не удалось перезаписать строку замены, шаблон:
'(^[a-z]|_[a-z])'
, заменить строку:'U1'
, причина: недопустимая escape-последовательность
SELECT REGEXP_REPLACE('hello_world', '(^[a-z]|_[a-z])', UPPER('\1'), 1, 0, 'c')
Обертывание UPPER
вокруг замены также ничего не дало, как ожидалось.
Мне бы очень хотелось избежать какого-либо решения для конкатенации, поскольку SQL станет уродливым и его будет сложно поддерживать быстро.
Другой пример: я хотел бы взять HelloWorld
и заставить его сказать hello_world
аналогично приведенному выше, я получаю ту же ошибку:
SELECT REGEXP_REPLACE('HelloWorld', '([a-z])([A-Z])', '\1\L\2', 1, 0, 'c');
Не удалось перезаписать строку замены, шаблон:
'([a-z])([A-Z])'
, заменить строку:'1L2'
, причина: недопустимая escape-последовательность
Ответ №1:
Нет необходимости в сложных регулярных выражениях. Snowflake поддерживает строковую функцию INITCAP()
, которая делает именно то, что вы хотите:
select initcap('hello world')
Комментарии:
1. Спасибо, это может частично решить мою проблему, но мне все еще нужно регулярное выражение для поддержки других вариантов использования, помимо простого, который я упомянул здесь.
2. можете ли вы задать вопрос с более сложным случаем? может быть, мы тоже сможем решить эту проблему
3. @FelipeHoffa Я добавил 2-й пример выше.