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 infixo:

<string_expression> COLLATE '<collation_specification>'
Copy

Argumentos

string_expression

A cadeia de caracteres a ser copiada.

collation_specification

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 aplica a nova especificação de agrupamento em vez da especificação original à 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

Os exemplos a seguir mostram que chamar a função COLLATE retorna uma cópia da cadeia de caracteres com uma especificação de agrupamento diferente.

Crie uma tabela e insira uma linha. A especificação de agrupamento do valor na linha inserida é es (espanhol).

CREATE OR REPLACE TABLE collation1 (v VARCHAR COLLATE 'es');
INSERT INTO collation1 (v) VALUES ('ñ');
Copy

Este exemplo mostra que a função COLLATE não altera a cadeia de caracteres. A cadeia de caracteres copiada na terceira coluna está em letras minúsculas, o que é o mesmo que a cadeia de caracteres original na primeira coluna. Entretanto, a especificação de agrupamento do valor retornado COLLATE por foi alterada de es para es-ci.

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

Este exemplo mostra que, embora o valor retornado por COLLATE ainda seja uma cadeia de caracteres minúscula, o especificador de agrupamento ci é usado ao comparar 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, '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                      |
+---+--------------------------+--------------------------+---------------------+---------------------------+

Este exemplo classifica os resultados usando o agrupamento alemão.

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

As duas consultas seguintes retornam o mesmo resultado. O primeiro usa COLLATE como uma função, enquanto o segundo usa COLLATE como um 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