NLSSORT Oracle в Snowflake

Я пытаюсь преобразовать следующий код из Oracle в Snowflake:

order by nlssort(name, 'NLS_SORT=BINARY')

Я знаю, что NLSSORT не является функцией Snowflake, но есть ли что-нибудь, что я могу использовать в качестве альтернативы?

1 ответ

Решение

Он уже должен быть очень похож на сортировку по умолчанию Snowflake - вам просто нужно учитывать кодировку вашей базы данных в Oracle (select * from nls_database_parameters where parameter='NLS_CHARACTERSET') и посмотрите, имеет ли он другой двоичный порядок, чем ASCII/UTF-8.

Документация Oracle:

Если значение BINARY, то сравнение основано непосредственно на байтовых значениях в двоичной кодировке сравниваемых символьных значений.

Документация Snowflake:

Все данные сортируются в соответствии с числовым значением байта каждого символа в таблице ASCII. Поддерживается кодировка UTF-8.

Итак, я думаю, вы должны просто сделать:

order by name

Это как-то странно, что кто-то написал бы этот код Oracle для начала, поскольку BINARY - это порядок сортировки по умолчанию (сопоставление). Но если ваша база данных Oracle использует многоязычную сортировку (что не часто) для других запросов, я не думаю, что вы сможете легко эмулировать это в Snowflake.

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