Kategorien:

Zeichenfolgen- und Binärfunktionen

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>')
Copy

Die Funktion COLLATE kann wie ein Infix Operator verwendet werden:

<string_expression> COLLATE '<collation_specification>'
Copy

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 ('ñ');
Copy

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;
Copy
+---+--------------+---------------------+--------------------------------+
| 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;
Copy
+---+--------------------------+--------------------------+---------------------+---------------------------+
| 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');
Copy

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');
Copy
SELECT spanish_phrase FROM collation_demo 
  ORDER BY spanish_phrase COLLATE 'utf8';
Copy