Oficina da Net Logo

Ignorando case sensitive na consulta SQL

Vou mostrar aqui uma solução que tenho utilizado frequentemente em alguns trabalhos, substituindo um pouco uma série de tratamentos dentro da query e consequentemente, economizando um tempinho! Geralmente os SGBDs são case sensitive e é muito comum recorrermos a alternativas para transformar os textos na hora de comparar valores do banco case sensitive em consultas que fazemos.

Por | @msantino Programação 3 comentários
Vou mostrar aqui uma solução que tenho utilizado frequentemente em alguns trabalhos, substituindo um pouco uma série de tratamentos dentro da query e consequentemente, economizando um tempinho!

Problema:


Como fazer buscas em banco de dados ignorando letras maiusculas/minusculas?

Geralmente os SGBDs são case sensitive e é muito comum recorrermos a alternativas para transformar os textos na hora de comparar valores do banco case sensitive em consultas que fazemos.

Exemplo de uma query comum:


SELECT * FROM cliente WHERE nome LIKE ‘%Marcelo%’;


Nessa query, retornarão apenas clientes que possuam Marcelo (com M maiúsculo) no nome. Se o valor consultado estivesse em letras minúsculas (marcelo), ignoraria todos os nomes em maiúsculos cadastrados no banco.

Alternativa Padrão:


Algumas pessoas passaram a utilizar a função UPPER para eliminar esse problema:
SELECT * FROM cliente WHERE UPPER(nome) LIKE ‘%’ || UPPER(’Marcelo’) || ‘%’;


Nesse caso, o valor armazenado na coluna nome será transformado para CAIXA ALTA e o mesmo acontecerá para o valor consultado. No caso, o valor Marcelo será transformado para MARCELO.

Isso funciona até certo ponto, pois essa função não converte letras acentuadas e caracteres especiais. No caso, João seria transformado para JOãO. Creio que esse não é o nosso objetivo, nesse caso.

Eis a solução para o problema:


Sendo assim, a melhor alternativa para esse caso seria usar o termo “~*” (til + asterísco). Nesse caso, o Postgre automaticamente procura por qualquer ocorrência do valor pesquisado, ignorando o case sensitive.
SELECT * FROM cliente WHERE nome ~* ‘Marcelo’;


Qualquer dúvida comentem...

MAIS SOBRE: #sql  #case sensitive  #consulta  #query
Comentários
Carregar comentários