Làm cách nào tôi có thể sắp xếp trong Oracle một cột Varchar2 hoặc NVarchar2 theo thứ tự được xác định tùy chỉnh của riêng tôi. Hoặc là bất kỳ tùy chọn hiện có nào sẽ đặt chữ cái đầu tiên, sau đó là số, sau đó là tất cả các ký tự đặc biệt.
Cách tiếp cận đầu tiên của chúng tôi là sử dụng một hàm thực hiện một số thủ công các ký tự thành số.
select id, sorted_column
from some_table
order FN_SPECIAL_SORT_KEY(sorted_column,'asc')
Hàm sắp xếp đặc biệt ánh xạ mỗi ký tự thành một số có 2 chữ số và giá trị trả về được sử dụng để sắp xếp. Điều này dường như chỉ là sự kết hợp thực sự tốn kém, và nó cảm thấy sai.
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;
Tôi đang có một thời gian khó khăn để đưa ra một phương pháp thay thế. Tôi muốn biết những vấn đề tồn tại với phương pháp này. Có lẽ chúng ta không có lựa chọn thay thế.
Phụ lục 1:
Thêm ví dụ về dữ liệu được sắp xếp. Nói chung, tất cả các ký tự alpha không nhạy, sau đó là các số 0-9, sau đó là các ký tự đặc biệt theo bất kỳ thứ tự nào.
Dưới đây là một mẫu sắp xếp danh sách tăng dần. Hãy nhớ rằng các ký tự đặc biệt có thể hoán đổi cho nhau, tất cả chúng nên nằm sau các chữ cái và số. Trong sắp xếp nhị phân, một số ký tự đặc biệt nằm trước các chữ cái (tức là ')
Đơn hàng mong muốn của tôi,
AB1 $
aCC #
ac '
BZ
Thứ tự nhị phân của Oracle
AB1 $
BZ
ac '
acc #