Поддерживает ли Snowflake нечувствительный к регистру фильтр предложений, подобный SQL Server - PullRequest
0 голосов
/ 07 апреля 2020

Я перемещаю SQL код в снежинку, и во время миграции я обнаружил, что по умолчанию снежинка неправильно сравнивает поле varchar (например, выберите 1, где 'Hello' = 'hello'). Чтобы решить эту проблему, я установил сопоставление «en-ci» на уровне аккаунта. Однако теперь я не могу использовать REPLACE, как важную функцию.

Возможно ли в снежинке выполнять сравнение varchar без учета регистра (без явного упоминания параметров сортировки или использования UPPER-функции) и по-прежнему использовать функцию replace?

Буду признателен за любую помощь.

Спасибо,

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

regexp_replace - ваш друг, он допускает параметр «i», который означает «игнорировать регистр»: https://docs.snowflake.com/en/sql-reference/functions/regexp_replace.html

Например, вы можете сделать что-то подобное:

select regexp_replace('cats are grey, cAts are Cats','cats','dogs',1,0,'i');

Я принял значения по умолчанию для положения и вхождения, но их также можно настроить

И вы все равно можете сделать сравнение (также основанное на регулярном выражении, также известном как "RLIKE"): https://docs.snowflake.com/en/sql-reference/functions/rlike.html

0 голосов
/ 10 апреля 2020

Вы можете сравнить тест с интенсивным регистром с помощью ILIKE

select 1 where 'Hello' ilike 'hello'
...