Wie kann ich in Oracle eine Varchar2- oder NVarchar2-Spalte so sortieren, dass sie in meiner benutzerdefinierten Reihenfolge vorliegt? Oder sind vorhandene Optionen verfügbar, bei denen zuerst Buchstaben, dann Zahlen und dann alle Sonderzeichen eingefügt werden?
Unser erster Ansatz war die Verwendung einer Funktion, mit der Zeichen manuell Zahlen zugeordnet werden können.
select id, sorted_column
from some_table
order FN_SPECIAL_SORT_KEY(sorted_column,'asc')
Die spezielle Sortierfunktion ordnet jedes Zeichen einer zweistelligen Zahl zu, und der Rückgabewert wird zum Sortieren verwendet. Dies scheint nur eine sehr teure Verkettung zu sein, und es fühlt sich falsch an.
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;
Es fällt mir schwer, einen alternativen Ansatz zu finden. Ich möchte wissen, welche Probleme mit diesem Ansatz bestehen. Vielleicht haben wir keine Alternativen.
Nachtrag 1:
Beispiel für sortierte Daten hinzufügen. Im Allgemeinen wird bei Großbuchstaben die Groß- und Kleinschreibung nicht berücksichtigt, dann die Zahlen 0 bis 9 und dann die Sonderzeichen in beliebiger Reihenfolge.
Hier ist eine sortierte aufsteigende Beispielliste. Beachten Sie, dass Sonderzeichen austauschbar sind. Sie sollten alle nach Buchstaben und Zahlen stehen. Bei der binären Sortierung stehen einige Sonderzeichen vor Buchstaben (dh ')
Meine gewünschte Bestellung,
AB1 $
aCC #
ac '
BZ
Oracle binäre Reihenfolge
AB1 $
BZ
ac '
acc #