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

Publicado por Fabio Cerqueira em 04/09/2004

[ Hits: 11.681 ]

 


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

Tuning PostgreSQL 9.1 com pgtune - Debian e derivados

Instalação do PostgreSQL no CoLinux-Debian

Criando domínio com função de validação no PostgreSQL

Instalando, configurando e administrando o Postgres

Modelagem de bancos de dados

  

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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts