Kategorien:

Zeichenfolgen- und Binärfunktionen

COLLATE

Gibt eine Kopie der ursprünglichen Zeichenfolge zurück, jedoch mit der angegebenen Eigenschaft Sortierungsspezifikation anstelle der ursprünglichen Eigenschaft Sortierungsspezifikation.

Diese Kopie kann für nachfolgende Zeichenfolgenvergleiche verwendet werden, um die neue Sortierungsspezifikation 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

Zeichenfolgenausdruck

Die Zeichenfolge, von der eine Kopie erstellt werden soll.

Sortierungsspezifikation

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 Sortierungsspezifikation anstelle der ursprünglichen Eigenschaft Sortierungsspezifikation.

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 Sortierungsspezifikation 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 von COLLATE 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 table 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';