NLSSORT Oracle в Snowflake

#sql #oracle #snowflake-cloud-data-platform #snowsql #nls-sort

#sql #Oracle #snowflake-облачная платформа для обработки данных #snowsql #nls-сортировка

Вопрос:

Я пытаюсь преобразовать следующий код из 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:

Если значение является ДВОИЧНЫМ, то сравнение основано непосредственно на байтовых значениях в двоичной кодировке сравниваемых символьных значений.

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

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

Поэтому я думаю, что вы должны быть в состоянии просто сделать:

 order by name
  

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