OracleでVarchar2またはNVarchar2列を独自のカスタム定義の順序に並べ替えるにはどうすればよいですか。または、最初に文字、次に数字、次にすべての特殊文字を配置する既存のオプションがあります。
最初のアプローチは、文字を数字に手動でマッピングする関数を使用することでした。
select id, sorted_column
from some_table
order FN_SPECIAL_SORT_KEY(sorted_column,'asc')
特殊なソート関数は、各文字を2桁の数値にマップし、戻り値はソートに使用されます。これは本当に高額な連結であるように見え、間違っているように感じます。
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#