Consultas sem preocupação com maiúsculas ou minúsculas no PostgreSQL

Publicado por Fabio Cerqueira em 04/09/2004

[ Hits: 12.427 ]

 


Consultas sem preocupação com maiúsculas ou minúsculas no PostgreSQL



O PostgreSQL é um tanto quanto exigente quanto à pesquisa de strings em seu formato. Por exemplo, podem ocorrer casos em que se busque "palavra" e no banco exista "Palavra" (com a primeira em maiúsculo). Isso pode acarretar um problema.

Veja uma solução simples:

SELECT c.cli_nome, c.cli_cpf, d.dep_nome
    FROM clientes c
    LEFT JOIN dependentes d
    ON c.cli_codigo = d.cli_codigo
    WHERE UPPER(c.cli_nome) LIKE UPPER('%$ tf_nome%');

O código em questão retorna todos os clientes e seus dependentes, mesmo aqueles que não tenham dependentes (LEFT JOIN), que satisfaçam à condição LIKE, transformando todos os atributos envolvidos para maiúsculos, somente durante a pesquisa, contornando, assim, possíveis ocorrências variadas.

Espero que ajude!

Fábio.

Outras dicas deste autor

Criando um tipo específico para retorno de dados no PostgreSQL

Leitura recomendada

Consulta aleatória com PostgreSQL

Documentação online do PostgreSQL

Instalar a última versão do PostgreSQL no Lunix mantendo atualizado

PostgreSQL - Alterando senha do usuário postgres

Autovacuum do PostgreSQL

  

Comentários
[1] Comentário enviado por paulo_mueller em 04/09/2004 - 18:14h

O grande problema é que a dica acima faz que índices não sejam utilizados na coluna c.cli_nome. Ou seja, isto só é útil para tabelas que tenham poucas linhas.

[2] Comentário enviado por webvp em 12/01/2005 - 18:08h

Você também poder usar o ILIKE

[3] Comentário enviado por rodrigo.dfreitas em 03/05/2005 - 16:14h

tanto voce pode usar o ilike quanto voce pode criar o indice para o upper do campo :)

[4] Comentário enviado por filype em 08/11/2005 - 10:53h

Isso é verdade, o que pode complementar com relação à datas.

Pode-se fazer o seguinte:

SELECT c.cli_nome, c.cli_cpf, d.dep_nome, c.dt_nasc
FROM clientes c
LEFT JOIN dependentes d
ON c.cli_codigo = d.cli_codigo
WHERE to_char(c.dt_nasc, 'dd/mm/yyyy') = to_char(CURRENT_TIMESTAMP, 'dd/mm/yyyy');

Assim procuramos os clientes que fazem aniversário hoje. :)

eu nao sei pq eu ainda escrevo nisto...
ninguem lê comentarios mesmo. ;/




Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts