- 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_specificationeine 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.
Bemerkung
Weitere Beispiele für die Verwendung der COLLATE-Funktion finden Sie unter Beispiele für Sortierung (Collation).
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';