Categorias:

Funções de cadeia de caracteres e binários

COLLATE

Retorna uma cópia da cadeia de caracteres original, mas com a propriedade collation_specification especificada, em vez da propriedade collation_specification original.

Esta cópia pode ser usada em comparações de cadeias de caracteres subsequentes, que utilizarão o novo collation_specification.

Sintaxe

A função COLLATE pode ser chamada como uma função normal:

COLLATE(<string_expression>, '<collation_specification>')
Copy

A função COLLATE pode ser usada como se fosse um operador INFIX:

<string_expression> COLLATE '<collation_specification>'
Copy

Argumentos

string_expression

A cadeia de caracteres a ser copiada.

collation_specification

Isso especifica o agrupamento a ser armazenado com a cópia da cadeia de caracteres. Para obter mais informações sobre os especificadores de agrupamento, consulte Especificações de agrupamento.

Retornos

Retorna uma cópia da cadeia de caracteres original, mas com a propriedade collation_specification especificada, em vez da propriedade collation_specification.

Notas de uso

Cada VARCHAR contém uma propriedade que contém o especificador de agrupamento a ser utilizado quando se compara esse VARCHAR com outro VARCHAR. A função COLLATE copia a cadeia de caracteres, mas coloca a nova especificação de agrupamento em vez da especificação original na cópia. A cadeia de caracteres em si permanece inalterada; apenas o especificador do agrupamento associado à cadeia de caracteres é alterado.

Quando COLLATE é usado como um operador infixo, o collation_specification deve ser uma cadeia de caracteres constante, não uma expressão geral.

Exemplos

O exemplo a seguir mostra que chamar a função COLLATE retorna uma cópia da cadeia de caracteres com uma especificação de agrupamento diferente.

Crie a tabela e insira uma linha. A especificação do agrupamento do valor na linha inserida é ‘sp’ (espanhol).

CREATE TABLE collation1 (v VARCHAR COLLATE 'sp');
INSERT INTO collation1 (v) VALUES ('ñ');
Copy

Isso mostra que a função COLLATE não muda a cadeia de caracteres. A cadeia de caracteres copiada na terceira coluna é em letra minúscula, assim como a cadeia de caracteres original na primeira coluna é em letra minúscula. No entanto, a especificação de agrupamento do valor retornado por COLLATE mudou de ‘sp’ para ‘sp-upper’; você pode ver isto na quarta coluna.

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

Esta consulta mostra que embora o valor retornado por COLLATE ainda seja uma cadeia de caracteres de letras minúsculas, o especificador de agrupamento ‘upper’ é usado quando se compara essa cadeia de caracteres com outra cadeia de caracteres:

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

Este comando ordena os resultados usando o agrupamento em alemão (Deutsch).

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

As duas consultas seguintes retornam o mesmo resultado. O primeiro usa COLLATE como função; o segundo usa COLLATE como operador infixo:

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