none
Concatenar no SQL SERVER

    Pergunta

  • No My SQL eu uso assim e funciona:
    SELECT count(cod_noticia) as total FROM noticia where cod_noticia <> 0 And CONCAT(titulo,' - ',resumo,' - ',texto) like '%casa%'

    Já no SQL SERVER estou tentando fazer assim e não está funcionando, alguém sabe por que????
    SELECT count(cod_noticia) as total FROM noticia where cod_noticia <> 0 And (titulo + resumo + texto) like '%casa%'

    Dá o seguinte erro:

    Microsoft OLE DB Provider for SQL Server error '80040e14'

    Invalid operator for data type. Operator equals add, type equals text.


    Se que é problema de CONCATENAÇÃO.

    Obrigado
    domingo, 3 de fevereiro de 2008 09:23

Respostas

  •  

    Olá Hémilton,

     

    O problema é que você está tentando concatenar um campo do tipo Text com outra coluna, e não é possível fazer isso.

     

    Como solução, se estiver no SQL 2005, pode converter o campo para VARCHAR (MAX) que comporta o mesmo tamanho que o Text, mas, se estiver no 2000, o máximo possível é 8000 caracteres, se tiver mais que isso, certamente vai dar erro na concatenação. Tente assim:

     

    Code Snippet

    -- Para SQL 2005

    SELECT count(cod_noticia) as total FROM noticia where cod_noticia <> 0 And (titulo + resumo + CONVERT (VARCHAR (MAX), texto) like '%casa%'

    -- Para SQL 2000

    SELECT count(cod_noticia) as total FROM noticia WHERE cod_noticia <> 0 And (titulo + resumo + CONVERT (VARCHAR (8000), texto) LIKE '%casa%'

     

     

     

    Abraço

     

    domingo, 3 de fevereiro de 2008 12:25

Todas as Respostas

  •  

    Olá Hémilton,

     

    O problema é que você está tentando concatenar um campo do tipo Text com outra coluna, e não é possível fazer isso.

     

    Como solução, se estiver no SQL 2005, pode converter o campo para VARCHAR (MAX) que comporta o mesmo tamanho que o Text, mas, se estiver no 2000, o máximo possível é 8000 caracteres, se tiver mais que isso, certamente vai dar erro na concatenação. Tente assim:

     

    Code Snippet

    -- Para SQL 2005

    SELECT count(cod_noticia) as total FROM noticia where cod_noticia <> 0 And (titulo + resumo + CONVERT (VARCHAR (MAX), texto) like '%casa%'

    -- Para SQL 2000

    SELECT count(cod_noticia) as total FROM noticia WHERE cod_noticia <> 0 And (titulo + resumo + CONVERT (VARCHAR (8000), texto) LIKE '%casa%'

     

     

     

    Abraço

     

    domingo, 3 de fevereiro de 2008 12:25
  • Hélmiton,

     

    Os campos da condição (titulo + resumo + texto) precisam ser VARCHAR ou CHAR para funcionar.

     

    Se o campo texto for do tipo text faça a conversão para VARCHAR.

     

    Exemplo:

     

    SELECT count(cod_noticia) as total FROM noticia where cod_noticia <> 0 And (titulo + resumo +

    CAST(texto AS VARCHAR(8000))

    ) like '%casa%'

     


    Ajude a melhorar o nosso Forum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.
    domingo, 3 de fevereiro de 2008 12:29
  • Muito obrigado meu amigo, valeu mesmo
    segunda-feira, 4 de fevereiro de 2008 00:01
  • Hélmiton,

     

    Depois marque o post do Alexandre VM como útil e ajude a melhorar a qualidade do nosso fórum! 

     

    Obrigado.

    segunda-feira, 4 de fevereiro de 2008 13:02
  • ola Malta, preciso da vossa ajuda urgente, não sei trabalhar com o sql e tenho 3 tabelas ja criadas e preciso de ir a busca de uma caminho que está no disco C não sei como concatenar ou usar as 3 tabelas para a resolução

    select * from e_obje00 ob, e_volu00, e_tbls00 são as tabelas que ja estão criadas

    C:\0012\00000000 tenho de fazer de forma que estas tabelas me deiam essa caminho, como é que eu faço

    Ajudem-me por favor

    • Sugerido como Resposta Wilma_2012 terça-feira, 6 de março de 2012 10:13
    terça-feira, 6 de março de 2012 10:12