Bagaimana saya bisa menyortir kolom Oracle a Varchar2 atau NVarchar2 agar sesuai pesanan saya sendiri. Atau apakah ada opsi yang ada yang akan mengutamakan huruf, lalu angka, lalu semua karakter khusus.
Pendekatan pertama kami menggunakan fungsi yang melakukan pemetaan karakter secara manual ke angka.
select id, sorted_column
from some_table
order FN_SPECIAL_SORT_KEY(sorted_column,'asc')
Fungsi sortasi khusus memetakan setiap karakter ke angka 2 digit, dan nilai kembali digunakan untuk menyortir. Ini tampaknya hanya gabungan yang sangat mahal, dan rasanya salah.
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;
Saya mengalami kesulitan untuk datang dengan pendekatan alternatif. Saya ingin tahu masalah apa yang ada dengan pendekatan ini. Mungkin kita tidak punya alternatif.
Tambahan 1:
Menambahkan contoh data yang diurutkan. Secara umum, semua huruf alfa tidak peka huruf besar, kemudian angka 0-9, kemudian karakter khusus dalam urutan apa pun.
Berikut adalah contoh daftar ascending yang diurutkan. Perlu diingat karakter khusus dapat dipertukarkan, mereka semua harus setelah huruf dan angka. Dalam pengurutan biner, beberapa karakter khusus sebelum huruf (yaitu ')
Pesanan saya yang diinginkan,
AB1 $
aCC #
ac '
BZ
Urutan biner Oracle
AB1 $
BZ
ac '
acc #