Возможно ли выполнить преобразование регистра с помощью regexp_replce в snowflake?

#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-й пример выше.