- Categorias:
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>')
A função COLLATE pode ser usada como se fosse um operador infixo:
<string_expression> COLLATE '<collation_specification>'
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 ('ñ');
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;
+---+--------------+---------------------+--------------------------------+
| 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;
+---+--------------------------+--------------------------+---------------------+---------------------------+
| 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');
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');
SELECT spanish_phrase FROM collation_demo
ORDER BY spanish_phrase COLLATE 'utf8';