- Catégories :
COLLATE¶
Renvoie une copie de la chaîne d’origine, mais avec la propriété collation_specification
spécifiée à la place de la propriété d’origine collation_specification
.
Cette copie peut être utilisée dans les comparaisons de chaînes suivantes, qui utiliseront la nouvelle collation_specification
.
Syntaxe¶
La fonction COLLATE peut être appelée comme une fonction normale :
COLLATE(<string_expression>, '<collation_specification>')
La fonction COLLATE peut être utilisée comme s’il s’agissait d’un opérateur infix :
<string_expression> COLLATE '<collation_specification>'
Arguments¶
string_expression
La chaîne à copier.
collation_specification
Le classement à stocker avec la copie de la chaîne. Pour plus d’informations sur les spécificateurs de classement, voir Spécifications de classement.
Renvoie¶
Retourne une copie de la chaîne d’origine, mais avec la propriété collation_specification
spécifiée à la place de la collation_specification
d’origine.
Notes sur l’utilisation¶
Chaque VARCHAR contient une propriété qui contient le spécificateur de classement à utiliser lors de la comparaison de VARCHAR avec un autre VARCHAR. La fonction COLLATE copie la chaîne, mais applique la nouvelle spécification de classement plutôt que la spécification d’origine dans la copie.
La chaîne elle-même est inchangée ; seul le spécificateur de classement associé à la chaîne est modifié.
Lorsque COLLATE est utilisé en tant qu’opérateur infix, la
collation_specification
doit être une chaîne constante et non une expression générale.
Exemples¶
Les exemples suivants montrent que l’appel de la fonction COLLATE renvoie une copie de la chaîne avec une spécification de classement différente.
Créer une table et insérer une ligne : La spécification de classement de la valeur dans la ligne insérée est es
(espagnol).
CREATE OR REPLACE TABLE collation1 (v VARCHAR COLLATE 'es');
INSERT INTO collation1 (v) VALUES ('ñ');
Cet exemple montre que la fonction COLLATE ne modifie pas la chaîne. La chaîne copiée dans la troisième colonne est en minuscules, ce qui est identique à la chaîne d’origine dans la première colonne. Cependant, la spécification de classement de la valeur renvoyée par COLLATE a changé de es
à es-ci
.
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 |
+---+--------------+---------------------+--------------------------------+
Cet exemple montre que, bien que la valeur renvoyée par COLLATE soit toujours une chaîne en minuscules, le spécificateur de classement ci
est utilisé lors de la comparaison de cette chaîne avec une autre chaîne :
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 |
+---+--------------------------+--------------------------+---------------------+---------------------------+
Cet exemple trie les résultats en utilisant le classement allemand.
SELECT *
FROM t1
ORDER BY COLLATE(col1 , 'de');
Les deux requêtes suivantes renvoient le même résultat. Le premier utilise COLLATE en tant que fonction ; le second utilise COLLATE en tant qu’opérateur infix :
SELECT spanish_phrase FROM collation_demo
ORDER BY COLLATE(spanish_phrase, 'utf8');
SELECT spanish_phrase FROM collation_demo
ORDER BY spanish_phrase COLLATE 'utf8';