Как я могу отсортировать в Oracle столбцы Varchar2 или NVarchar2 в моем собственном порядке. Или доступны какие-либо существующие опции, в которых сначала ставятся буквы, затем цифры, а затем все специальные символы.
Наш первый подход заключался в использовании функции, которая вручную отображает символы в числа.
select id, sorted_column
from some_table
order FN_SPECIAL_SORT_KEY(sorted_column,'asc')
Специальная функция сортировки отображает каждый символ в двузначное число, а возвращаемое значение используется для сортировки. Кажется, это просто очень дорогая конкатенация, и она кажется неправильной.
for i in 1..length(sorted_text)
loop
v_result:=v_result || case substr(sorted_text,i,1)
WHEN ' ' THEN 82 WHEN '!' THEN 81 WHEN '"' THEN 80 WHEN '#' THEN 79 WHEN '$'
..............
WHEN 'u' THEN 15 WHEN 'U' THEN 15 WHEN 'v' THEN 14 WHEN 'V' THEN 14 WHEN 'w' THEN 13 WHEN 'W' THEN 13 WHEN 'x'
....
else 90 end;
end loop;
Мне трудно придумать альтернативный подход. Я хочу знать, какие проблемы существуют с этим подходом. Возможно, у нас нет альтернативы.
Приложение 1:
Добавление примера отсортированных данных. Как правило, все буквенные символы не чувствительны к регистру, затем цифры 0-9, затем специальные символы в любом порядке.
Вот пример отсортированного списка по возрастанию. Имейте в виду, что специальные символы взаимозаменяемы, все они должны быть после букв и цифр. В двоичной сортировке некоторые специальные символы перед буквами (то есть ')
Мой желаемый заказ,
AB1 $
aCC #
ac '
BZ
Двоичный порядок Oracle
AB1 $
BZ
ac '
acc #