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

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                          |
+---+--------------+------------------------+-----------------------------------+
Copy

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                         |
+---+--------------------------+--------------------------+------------------------+------------------------------+
Copy

Dieser Befehl sortiert die Ergebnisse anhand der deutschen Sortierung.

SELECT *
    FROM t1
    ORDER BY COLLATE(col1 , 'de');
Copy

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