Como posso classificar no Oracle uma coluna Varchar2 ou NVarchar2 para estar na minha própria ordem definida personalizada. Ou existem opções disponíveis que colocarão primeiro as letras, os números e todos os caracteres especiais.
Nossa primeira abordagem foi usar uma função que faz um mapeamento manual de caracteres para números.
select id, sorted_column
from some_table
order FN_SPECIAL_SORT_KEY(sorted_column,'asc')
A função de classificação especial mapeia cada caractere para um número de 2 dígitos e o valor de retorno é usado para classificação. Isso parece ser apenas uma concatenação realmente cara e parece errado.
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;
Estou tendo dificuldades para propor uma abordagem alternativa. Quero saber que problemas existem com essa abordagem. Talvez não tenhamos alternativas.
Adenda 1:
Adicionando exemplo de dados classificados. Em geral, todos os caracteres alfa não fazem distinção entre maiúsculas e minúsculas e, em seguida, números de 0 a 9, depois caracteres especiais em qualquer ordem.
Aqui está um exemplo de lista ascendente classificada. Lembre-se de que caracteres especiais são intercambiáveis; todos devem estar depois de letras e números. No tipo binário, alguns caracteres especiais estão antes das letras (ie ')
Meu pedido desejado,
AB1 $
aCC #
ac '
BZ
Ordem binária do Oracle
AB1 $
BZ
ac '
acc #