Ir para conteúdo
Fórum Script Brasil
  • 0

busca por LIKE


lpcs007

Pergunta

Bom dia pessoal,

Eu possuo um sistema PHP com mysql e acabei de migrar pra postgresql. Portanto, estou readaptando meu sistema pra funcionar com esse banco de dados tão falado.
Porém, estou com um pequeno problema na parte de busca no banco de dados.

Uma de minhas tabelas possui as colunas:

id -> integer
empresa -> integer
data -> timestamp
operador -> integer
msg -> text

Até ai funciona tudo normal, consulta, inserção, exclusão, etc. O problema vem quando faço uma busca por like usando texto em uma coluna integer/date/timestamp/numeric, por exemplo:

SELECT * FROM os_interacao WHERE id LIKE '%exemplo%' OR empresa LIKE '%exemplo%' OR data LIKE '%exemplo%' OR operador LIKE '%exemplo%' OR msg LIKE '%exemplo%';

Essa consulta retorna o erro:

ERROR:  operator does not exist: integer ~~ unknown
LINE 1: SELECT * FROM os_interacao WHERE id LIKE '%exemplo%' OR empr...
                                            ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

Se eu busco texto na coluna msg ou numero na coluna integer, o retorno funciona normal.

Como eu faço pra resolver esse problema?

Editado por lpcs007
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

jovem, like e ilike só funcionam com tipo text ou varchar.

você diz ali q id é integer e você ta comparaando id com campos de texto.

sua consulta deveria ser:

 

--like case sensitive
--ilike not case sensitive
SELECT 
  * 
FROM 
  os_interacao 
WHERE 
  id::text ilike '%123123%' --  fazendo um cast para texto. Aqui tem que ser numeros, se o seu id é um integer
OR 
  empresa ilike '%exemplo%'  -- '%exemplo%' assim pesquisa qualquer parte do nome 'exemplo%' assim pesquisa que comece por...
OR 
  data between '2016-01-01' and '2016-12-31' -- não use like ou ilike para datas
OR  
  operador ilike '%123456789%' -- aqui tem que ser numeros, se o seu id é um integer
OR 
 msg  ilike '%exemplo%';

 

 

 

 

ps.: sempre que possível, deixe seu código indentado, para facilitar a leitura

quando você utilizar or, tlvz seja interessante você aninhar as suas clausulas where, para melhor obtenção de resultado.



--like case sensitive
--ilike not case sensitive
SELECT 
  * 
FROM 
  os_interacao 
WHERE 
  (id::text ilike '%123123%' --  fazendo um cast para texto. Aqui tem que ser numeros, se o seu id é um integer
OR 
  empresa ilike '%exemplo%'  -- '%exemplo%' assim pesquisa qualquer parte do nome 'exemplo%' assim pesquisa que comece por...
OR 
  data between '2016-01-01' and '2016-12-31' -- não use like ou ilike para datas
OR  
  operador ilike '%123456789%' -- aqui tem que ser numeros, se o seu id é um integer
OR 
 msg  ilike '%exemplo%');
Editado por Dr. House
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...