- 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 zu kopierende Zeichenfolge
collation_specification
Die Sortierung, 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, wendet aber die neue Sortierung und nicht die ursprüngliche Spezifikation auf die Kopie an.
Die Zeichenfolge selbst bleibt unverändert. Nur der der Zeichenfolge zugeordnete Sortierungsspezifizierer wird geändert.
Wenn COLLATE als Infix Operator verwendet wird, muss
collation_specification
eine konstante Zeichenfolge sein, kein allgemeiner Ausdruck.
Beispiele¶
Die folgenden Beispiele zeigen, dass der Aufruf der Funktion COLLATE eine Kopie der Zeichenfolge mit einer anderen Sortierungsangabe zurückgibt.
Erstellen Sie eine Tabelle und fügen Sie eine Zeile ein. Die Sortierungsspezifikation des Wertes in der eingefügten Zeile ist es
(Spanisch).
CREATE OR REPLACE TABLE collation1 (v VARCHAR COLLATE 'es');
INSERT INTO collation1 (v) VALUES ('ñ');
Dieses Beispiel zeigt, dass die Funktion COLLATE die Zeichenfolge nicht verändert. Die kopierte Zeichenfolge in der dritten Spalte besteht aus Kleinbuchstaben und entspricht der ursprünglichen Zeichenfolge in der ersten Spalte. Die Sortierungsspezifikation des von COLLATE zurückgegebenen Wertes hat sich jedoch von es
in es-ci
geändert.
SELECT v,
COLLATION(v),
COLLATE(v, 'es-ci'),
COLLATION(COLLATE(v, 'es-ci'))
FROM collation1;
+---+--------------+---------------------+--------------------------------+
| V | COLLATION(V) | COLLATE(V, 'ES-CI') | COLLATION(COLLATE(V, 'ES-CI')) |
|---+--------------+---------------------+--------------------------------|
| ñ | es | ñ | es-ci |
+---+--------------+---------------------+--------------------------------+
Dieses Beispiel 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 ci
verwendet wird:
SELECT v,
v = 'ñ' AS "COMPARISON TO LOWER CASE",
v = 'Ñ' AS "COMPARISON TO UPPER CASE",
COLLATE(v, 'es-ci'),
COLLATE(v, 'es-ci') = 'Ñ'
FROM collation1;
+---+--------------------------+--------------------------+---------------------+---------------------------+
| V | COMPARISON TO LOWER CASE | COMPARISON TO UPPER CASE | COLLATE(V, 'ES-CI') | COLLATE(V, 'ES-CI') = 'Ñ' |
|---+--------------------------+--------------------------+---------------------+---------------------------|
| ñ | True | False | ñ | True |
+---+--------------------------+--------------------------+---------------------+---------------------------+
In diesem Beispiel werden die Ergebnisse nach der deutschen Sortierung sortiert.
SELECT *
FROM t1
ORDER BY COLLATE(col1 , 'de');
Die folgenden zwei Abfragen geben das gleiche Ergebnis zurück. Die erste verwendet COLLATE als Funktion, während die zweite COLLATE als Infix-Operator verwendet:
SELECT spanish_phrase FROM collation_demo
ORDER BY COLLATE(spanish_phrase, 'utf8');
SELECT spanish_phrase FROM collation_demo
ORDER BY spanish_phrase COLLATE 'utf8';