- 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 INFIX:
<string_expression> COLLATE '<collation_specification>'
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 ('ñ');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 porCOLLATE
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 | +---+--------------+------------------------+-----------------------------------+
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 | +---+--------------------------+--------------------------+------------------------+------------------------------+
Este comando ordena os resultados usando o agrupamento em alemão (Deutsch).
SELECT * FROM t1 ORDER BY COLLATE(col1 , 'de');
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');SELECT spanish_phrase FROM collation_demo ORDER BY spanish_phrase COLLATE 'utf8';