Articles

Exemplos de consulta SQL SELECT insensível a casos

Posted on

SQL insensível a casos SELECT consulta FAQ: Como faço para emitir SQL SELECT consultas ignorando maiúsculas ou minúsculas (ignorando se uma string é maiúscula ou minúscula)?

Fundo

Quando comecei a escrever consultas SQL estava a utilizar o Postgresql, e usei algumas das suas capacidades de expressão regulares personalizadas para realizar consultas não sensíveis a maiúsculas. Isso pareceu-me uma boa ideia na altura, mas quando tentei mover a minha aplicação para uma base de dados MySQL, uma parte da minha aplicação já não funcionava. Depois de alguma depuração lembrei-me que tinha utilizado as capacidades de consulta específicas do Postgreql, por isso tive de reescrever essa porção do código para trabalhar com o MySQL.

Para poupar algum desse luto, os exemplos seguintes mostram como escrever consultas SQL SELECT insensíveis a maiúsculas e minúsculas utilizando a sintaxe padrão SQL. As consultas mostradas devem funcionar com a maioria, se não todas, as bases de dados compatíveis com SQL 92.

Uma advertência muito importante

Por favor note que há uma coisa MUITO IMPORTANTE a dizer sobre a abordagem mostrada:

Estas consultas forçam a sua base de dados a realizar um scan de tabela. Isto significa que se tiver um índice na coluna que está a pesquisar, esse índice não será utilizado. Assim, se tiver um bilião de registos na sua tabela, esta abordagem forçará a base de dados a consultar todos os mil milhões de registos. Obviamente, esta é uma advertência muito importante de que precisa de estar ciente.

Não publico comentários de pessoas que usam linguagem depreciativa, mas como uma pessoa escreveu nos comentários (entre insultos), “usar uma função para converter uma coluna inteira de dados requer uma digitalização de tabela e deve ser evitada numa cláusula WHERE.”

Selecção SQL insensível à caixa: Usar funções superiores ou inferiores

A forma padrão de efectuar consultas SQL insensíveis a casos é usar as funções SQL upper ou lower, como esta:

select * from users where upper(first_name) = 'FRED';

ou esta:

select * from users where lower(first_name) = 'fred';

Como pode ver, o padrão é fazer o campo que está a pesquisar em maiúsculas ou minúsculas, e depois fazer a sua sequência de pesquisa também ser maiúscula ou minúscula para corresponder à função SQL que utilizou. Isto funciona com todas as bases de dados SQL que utilizei, incluindo Postgresql, MySQL, e SQL Server.

SQL LIKE queries

Pode utilizar a mesma técnica para tornar o seu SQL LIKE queries case insensível também. Eis como utilizar a função maiúscula com um SQL LIKE consulta:

select * from users where upper(first_name) like '%AL%';

e aqui está o mesmo SQL insensível a casos LIKE consulta utilizando a função SQL lowercase:

select * from users where lower(first_name) like '%al%';

Sumário

Espero que estes exemplos de consulta SQL SELECT insensível a casos sejam úteis. Mais uma vez, o truque é converter o que quer que esteja a procurar para maiúsculas ou minúsculas usando as funções SQL superior e inferior, e depois fazer com que a sua cadeia de pesquisa corresponda a esse caso.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *