Сортировка строк по индивидуальному заказу в Oracle SQL - PullRequest
0 голосов
/ 28 февраля 2020

Задача :

Сначала мы определяем пользовательский порядок символов следующим образом:

A < ... < Z  <  a < ... < z  <  0 < ... < 9  <                              <
capitals        lowercase       digits         printable special characters   space

Порядок специальных символов не указан, поэтому они могут сравнивать произвольно.

Учитывая таблицу INPUT с одним столбцом VARCHAR2, отсортируйте его содержимое (строки, содержащие только символы, перечисленные в определении порядка) в лексикографическом порядке c, используя порядок символов, определенный выше.

Вопрос: как можно реализовать такую ​​сортировку в чистом Oracle SQL (без использования PL / SQL и недокументированных функций)?

Похоже Oracle БД не имеет возможности использовать такой заказ напрямую в ORDER BY.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Вы можете использовать параметры сортировки на уровне столбцов. Параметры сортировки определяют, как значения VARCHAR2 сравниваются и сортируются.

См. Параметры сопоставления на уровне столбцов или Параметры сопоставления на уровне операторов .

0 голосов
/ 28 февраля 2020

Вы можете использовать translate():

order by translate(col, 
                   'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
                   '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
                  )

Это заменяет символы, которые вас интересуют, на «естественный» порядок символов ASCII.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...