- Kategorien:
COLLATE¶
Gibt eine Kopie der ursprünglichen Zeichenfolge zurück, jedoch mit der angegebenen Eigenschaft collation_specification
anstelle der ursprünglichen Eigenschaft collation_specification
.
Diese Kopie kann für nachfolgende Zeichenfolgenvergleiche verwendet werden, um die neue collation_specification
zu nutzen.
Syntax¶
Die Funktion COLLATE
kann als normale Funktion aufgerufen werden:
COLLATE(<string_expression>, '<collation_specification>')
Die Funktion COLLATE
kann wie ein INFIX-Operator verwendet werden:
<string_expression> COLLATE '<collation_specification>'
Argumente¶
string_expression
Die Zeichenfolge, von der eine Kopie erstellt werden soll.
collation_specification
Dies gibt die Sortierung an, die mit der Kopie der Zeichenfolge gespeichert werden soll. Weitere Informationen zu Sortierungsspezifizierern finden Sie unter Sortierungsspezifikationen.
Rückgabewerte¶
Gibt eine Kopie der ursprünglichen Zeichenfolge zurück, jedoch mit der angegebenen Eigenschaft collation_specification
anstelle der ursprünglichen Eigenschaft collation_specification
.
Nutzungshinweise¶
Jedes VARCHAR
enthält eine Eigenschaft, die den Sortierungsspezifizierer enthält, der beim Vergleichen dieses VARCHAR
mit einem anderen VARCHAR
verwendet werden soll. Die Funktion COLLATE
kopiert die Zeichenfolge, fügt jedoch die neue Sortierungsspezifikation und nicht die ursprüngliche Spezifikation in die Kopie ein. Die Zeichenfolge selbst bleibt unverändert. Nur der der Zeichenfolge zugeordnete Sortierungsspezifizierer wird geändert.
Wenn COLLATE
als Infix-Operator verwendet wird, muss die collation_specification
eine konstante Zeichenfolge und kein allgemeiner Ausdruck sein.
Beispiele¶
Das folgende Beispiel zeigt, dass beim Aufrufen der Funktion COLLATE
eine Kopie der Zeichenfolge mit einer anderen Sortierungsspezifikation zurückgegeben wird.
Erstellen Sie die Tabelle, und fügen Sie eine Zeile ein. Die Sortierungsspezifikation des Werts in der eingefügten Zeile lautet ‚sp‘ (Spanisch).
CREATE TABLE collation1 (v VARCHAR COLLATE 'sp'); INSERT INTO collation1 (v) VALUES ('ñ');Dies zeigt, dass die Funktion
COLLATE
die Zeichenfolge nicht ändert. Die kopierte Zeichenfolge in der dritten Spalte besteht aus Kleinbuchstaben, genau wie die ursprüngliche Zeichenfolge in der ersten Spalte aus Kleinbuchstaben besteht. Die Sortierungsspezifikation des vonCOLLATE
zurückgegebenen Werts wurde jedoch von ‚sp‘ in ‚sp-upper‘ geändert. Sie können dies in der vierten Spalte sehen.SELECT v, COLLATION(v), COLLATE(v, 'sp-upper'), COLLATION(COLLATE(v, 'sp-upper')) FROM collation1; +---+--------------+------------------------+-----------------------------------+ | V | COLLATION(V) | COLLATE(V, 'SP-UPPER') | COLLATION(COLLATE(V, 'SP-UPPER')) | |---+--------------+------------------------+-----------------------------------| | ñ | sp | ñ | sp-upper | +---+--------------+------------------------+-----------------------------------+
Diese Abfrage zeigt, dass der von COLLATE
zurückgegebene Wert zwar immer noch eine Zeichenfolge in Kleinbuchstaben ist, beim Vergleich dieser Zeichenfolge mit einer anderen Zeichenfolge jedoch der Sortierungsspezifizierer ‚upper‘ verwendet wird:
SELECT v, v = 'ñ' AS "COMPARISON TO LOWER CASE", v = 'Ñ' AS "COMPARISON TO UPPER CASE", COLLATE(v, 'sp-upper'), COLLATE(v, 'sp-upper') = 'Ñ' FROM collation1; +---+--------------------------+--------------------------+------------------------+------------------------------+ | V | COMPARISON TO LOWER CASE | COMPARISON TO UPPER CASE | COLLATE(V, 'SP-UPPER') | COLLATE(V, 'SP-UPPER') = 'Ñ' | |---+--------------------------+--------------------------+------------------------+------------------------------| | ñ | True | False | ñ | True | +---+--------------------------+--------------------------+------------------------+------------------------------+
Dieser Befehl sortiert die Ergebnisse anhand der deutschen Sortierung.
SELECT * FROM t1 ORDER BY COLLATE(col1 , 'de');
Die folgenden zwei Abfragen geben das gleiche Ergebnis zurück. Der erste verwendet COLLATE
als Funktion; die zweite verwendet COLLATE
als Infix-Operator:
SELECT spanish_phrase FROM collation_demo ORDER BY COLLATE(spanish_phrase, 'utf8');SELECT spanish_phrase FROM collation_demo ORDER BY spanish_phrase COLLATE 'utf8';