In diesem Artikel erfahren Sie, wie Sie das Sortierproblem lösen können, das Zahlen und Sonderzeichen in Oracle-Strings enthält. Kürzlich bin ich bei einem Projekt auf eine solche Anforderung gestoßen, dass es erforderlich war, eine bestimmte Community nach Community, Gebäude, Einheitennummer und Raumnummer zu sortieren. Es scheint eine sehr einfache Anforderung zu sein, die mit einer einzigen SQL-Anweisung gelöst werden kann. Im Folgenden werde ich das Sortierproblem von Zahlen und Sonderzeichen in Oracle-Zeichenfolgen erläutern kann dir helfen.
Problembeschreibung:
Eine bestimmte Gemeinde muss nach Gemeinde, Gebäude, Einheitennummer und Raumnummer sortiert werden, aber sie ist sortiert Da die Zeichenfolge Zahlen enthält, werden zu diesem Zeitpunkt die folgenden Ergebnisse erzeugt:
Auf Gebäude Nr. 1 sollte Gebäude Nr. 2 folgen, das Abfrageergebnis lautet jedoch Gebäude Nr. 10.
Versuchen Sie zu lösen
Verwenden Sie einen regulären Ausdruck, um
zu ersetzen. Ergebnis:
Obwohl die Sortierung nach Gebäudenummern normal ist, werden Sie feststellen, dass die Sortierung nach Zimmernummern verwirrend ist. Überlegen Sie sich weiterhin Möglichkeiten
Die ultimative Lösung:
Verwenden Sie die Übersetzungsfunktion
, um festzustellen, dass die Ergebnisse normal angezeigt werden.
Im Folgenden erfahren Sie, wie Sie die Übersetzung verwenden
1. Grammatik:
TRANSLATE(string,from_str,to_str)
2. Zweck
Gibt die Zeichenfolge zurück, nachdem jedes Zeichen (alle Vorkommen) in from_str durch das entsprechende Zeichen in to_str ersetzt wurde. TRANSLATE ist eine Obermenge der von REPLACE bereitgestellten Funktionalität. Wenn from_str länger als to_str ist, werden die zusätzlichen Zeichen in from_str, aber nicht in to_str aus der Zeichenfolge entfernt, da sie keine entsprechenden Ersatzzeichen haben. to_str darf nicht leer sein. Oracle interpretiert leere Zeichenfolgen als NULL, und wenn ein Parameter in TRANSLATE NULL ist, ist das Ergebnis NULL.
3. Zulässige Speicherorte
Prozeduranweisungen und SQL-Anweisungen.
4. Beispiel
SQL-Code
SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual; TRANSLATE ( -------------- 123456ghij SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual; TRANSL ---------- 123456
Syntax: TRANSLATE(expr,from,to)
expr: stellt eine Zeichenfolge dar, die von links nach rechts eine Eins-zu-eins-Entsprechung aufweist. Wenn sie nicht übereinstimmen können, werden sie als Nullwerte betrachtet.
Beispiel:
select translate('abcbbaadef','ba','#@') from dual (b将被#替代,a将被@替代) select translate('abcbbaadef','bad','#@') from dual (b将被#替代,a将被@替代,d对应的值是空值,将被移走)
Daher: Die Ergebnisse sind: @#c##@@def und @#c## @@ef
Grammatik: TRANSLATE(expr,from,to)
expr: stellt eine Zeichenfolge dar, von und bis stehen in einer Eins-zu-eins-Entsprechung von links nach rechts. Wenn sie nicht korrespondieren können, sind sie es gelten als leere Werte.
Beispiel:
select translate('abcbbaadef','ba','#@') from dual (b将被#替代,a将被@替代) select translate('abcbbaadef','bad','#@') from dual (b将被#替代,a将被@替代,d对应的值是空值,将被移走)
Daher: Die Ergebnisse sind: @#c##@@@def und @#c##@@ef
Beispiele sind wie folgt:
Beispiel 1: Konvertieren Sie Zahlen in 9, andere Großbuchstaben in X und kehren Sie dann zurück.
SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') "License"FROM DUAL
Beispiel 2: Behalten Sie die Zahlen bei und entfernen Sie andere Großbuchstaben.
SELECT TRANSLATE('2KRW229','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789') "Translate example"FROM DUAL
Luo Yong hat das folgende Beispiel hinzugefügt:
Beispiel 3: Das Beispiel beweist, dass es nach Zeichen und nicht nach Bytes verarbeitet wird . Wenn to_string mehr Zeichen als from_string enthält, scheinen die zusätzlichen Zeichen keinen Nutzen zu haben und verursachen keine Ausnahme.
SELECT TRANSLATE('我是中国人,我爱中国', '中国', 'China') "Translate example" FROM DUAL
Beispiel 4: Das folgende Beispiel beweist, dass, wenn die Anzahl der Zeichen from_string größer als to_string ist, die zusätzlichen Zeichen entfernt werden, d. h. ina Drei Zeichen werden aus dem char-Parameter entfernt, natürlich wird die Groß-/Kleinschreibung beachtet.
SELECT TRANSLATE('I am Chinese, I love China', 'China', '中国') "Translate example" FROM DUAL
Beispiel 5: Das folgende Beispiel beweist, dass, wenn der zweite Parameter eine leere Zeichenfolge ist, die gesamte Rückgabe erfolgt ist null .
SELECT TRANSLATE('2KRW229', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '') "License" FROM DUAL
Beispiel 6: Bei einer Banküberweisung sehe ich oft, dass der Kontoinhaber nur das letzte Zeichen seines Namens anzeigt, und das Der Rest wird durch Sternchen ersetzt, also verwende ich Let's make etwas Ähnliches mit Translate.
SELECT TRANSLATE('中国人', substr('中国人',1,length('中国人') - 1), rpad('*',length('中国人'),'*')) "License" FROM DUAL
Wenn Sie auf solche Probleme stoßen, können Sie die oben genannten Methoden ausprobieren.
Verwandte Empfehlungen:
Über die Verwendungszusammenfassung der Funktion „Contains“ in Oracle
Detaillierte Erläuterung der Grundprinzipien von Oracle Paging-Abfrage
Tipps für die Oracle-Programmentwicklung
Das obige ist der detaillierte Inhalt vonLösung des Sortierproblems von Oracle-Zeichenfolgen, die Zahlen und Sonderzeichen enthalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!