Às vezes, precisamos fazer comparações no Oracle nas quais queremos desconsiderar se o texto está em maiúsculas, minúsculas ou se contém acentos. Para isso, existe uma solução chamada COLLATE, que pode ser utilizada a nível de tabela, sessão ou diretamente na query. Neste artigo, trataremos das collations aplicadas a nível de query.
Exemplo prático:
Você precisa consultar uma pessoa na base de dados chamada José, porém, no banco de dados ela está registrada como Jose — ou vice-versa. Nesse caso, a comparação padrão seria:
SELECT * FROM DUAL WHERE 'JOSÉ' = 'JOSE';
Resultado: nenhuma linha selecionada
Isso acontece porque, no padrão do banco de dados Oracle, 'JOSÉ' não é igual a 'JOSE'. No entanto, se utilizarmos uma collation específica, o Oracle poderá desconsiderar os acentos no momento da comparação.
Veja este exemplo:
SELECT * FROM DUAL WHERE 'JOSÉ' COLLATE BINARY_AI = 'JOSE';
SELECT * FROM DUAL WHERE 'JOSÉ' COLLATE BINARY_AI = 'Jose';
Se executarmos essas queries, obteremos uma linha de resultado para cada uma. Por quê?
Quando utilizamos o COLLATE BINARY_CI ou BINARY_AI, estamos informando ao banco que ele deve considerar os textos da seguinte forma:
_CI (Case Insensitive): Ignora diferenças entre maiúsculas e minúsculas, mas considera acentos.
_AI (Accent Insensitive): Ignora acentos, maiúsculas e minúsculas.
Simples e prático!
Você também pode definir uma collation a nível de tabela ou até mesmo de coluna, permitindo que todas as queries feitas sobre esse dado ignorem automaticamente as diferenças de acentuação e CASE.
Fontes:
Top comments (0)