none
Ajuda com o LIKE RRS feed

  • Pergunta

  • Pessoal quero fazer a seguinte consulta

    SELECT

     

    b.n_bloquete,m.descricao

    FROM

     

    boletocooperado b, movimento_banco m

    WHERE

     

    b.n_bloquete like m.descricao

     

    A dúvida eh como faço pra colocar o %% pq da forma q está nunca retorá valor.

    quarta-feira, 24 de novembro de 2010 12:36

Respostas

  • Ricardo

    basta adicionar o '%'+ segue um exemplo

    declare @tbA table (nome varchar(10))
    declare @tbB table (nome varchar(10))
    
    insert into @tbA values('Marcelo')
    insert into @tbA values('Marcia')
    insert into @tbA values('Maria')
    
    insert into @tbB values('Mar')
    insert into @tbB values('Clau')
    
    select * from @tbA a inner join @tbB b on a.nome like '%'+b.nome+'%'
    

    Seu código

    SELECT b.n_bloquete,m.descricao 
    FROM boletocooperado b inner join movimento_banco m ON b.n_bloquete like '%'+m.descricao+'%'
    

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Sugerido como Resposta Eder Costa quinta-feira, 23 de dezembro de 2010 13:29
    • Marcado como Resposta Eder Costa segunda-feira, 27 de dezembro de 2010 12:23
    quarta-feira, 24 de novembro de 2010 12:52
    Moderador
  • Complementando todas as sugestões postadas, sugiro a seguinte sintaxe:

     

    SELECT 
      b.n_bloquete,m.descricao
    
    FROM 
      boletocooperado b, movimento_banco m
    
    WHERE
      b.n_bloquete like '%' || m.descricao || '%'
    

    Ou, ainda, 

    SELECT 
      b.n_bloquete,m.descricao
    
    FROM 
      boletocooperado b, movimento_banco m
    
    WHERE
      m.descricao like '%' || b.n_bloquete || '%'
    Considerando, nessa segunda sugestão, que o campo m.descricao contenha um texto com b.n_bloquete no meio. Na primeira sugestão, o contrário.

    Sds.,

     


    Daniel Ethur Porto Alegre/RS
    • Editado Daniel Ethur quarta-feira, 24 de novembro de 2010 19:51 Acrescentei a segunda sugestao.
    • Marcado como Resposta Eder Costa segunda-feira, 27 de dezembro de 2010 12:23
    quarta-feira, 24 de novembro de 2010 19:46
  • Ricardo

    o uso de likes não tem boa performance... depedendo do tamanho de sua tabela e do quantidade de consultas um full-text poderia seria melhor que o like (é mais hardcore :D)

    mas verifique as indexações em sua tabela...

    Outro detalhe é ao usar o like vc depende do que o usuário vai digitar se ele digitar apenas a letra "A" vai te retornar praticamente todos os registros de sua tabela... este filto deve ser mais restritivo possível

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Sugerido como Resposta Eder Costa quinta-feira, 23 de dezembro de 2010 13:29
    • Marcado como Resposta Eder Costa segunda-feira, 27 de dezembro de 2010 12:23
    quinta-feira, 25 de novembro de 2010 11:09
    Moderador

Todas as Respostas

  • Ricardo

    basta adicionar o '%'+ segue um exemplo

    declare @tbA table (nome varchar(10))
    declare @tbB table (nome varchar(10))
    
    insert into @tbA values('Marcelo')
    insert into @tbA values('Marcia')
    insert into @tbA values('Maria')
    
    insert into @tbB values('Mar')
    insert into @tbB values('Clau')
    
    select * from @tbA a inner join @tbB b on a.nome like '%'+b.nome+'%'
    

    Seu código

    SELECT b.n_bloquete,m.descricao 
    FROM boletocooperado b inner join movimento_banco m ON b.n_bloquete like '%'+m.descricao+'%'
    

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Sugerido como Resposta Eder Costa quinta-feira, 23 de dezembro de 2010 13:29
    • Marcado como Resposta Eder Costa segunda-feira, 27 de dezembro de 2010 12:23
    quarta-feira, 24 de novembro de 2010 12:52
    Moderador
  • Marcelo a consulta demoro mtoo, tentei aseguinte consulta mais n veio resultado algum

    SELECT

     

    b.n_bloquete,m.descricao

    FROM

     

    boletocooperado b,movimento_banco m

    WHERE

     

    cast(b.n_bloquete as varchar) in (SELECT substring(descricao,17,8) FROM movimento_banco)

    quarta-feira, 24 de novembro de 2010 15:18
  • Ricardo,

    O like deve ser feito com algum valor. Se passar uma coluna não irá trazer o desejado. Tipo:

    SELECT b . n_bloquete , m . descricao

    FROM

    boletocooperado b , movimento_banco m

    WHERE 

    b . n_bloquete like '%abc%'

     

    Tem q rever a sua logica.

     

    Att.,


    Marco Antônio Pinheiro / MCTS - Database Developer 2008 - http://marcoantoniopinheiro.blogspot.com Se o post foi útil, não esqueça de marcá-lo.
    quarta-feira, 24 de novembro de 2010 15:38
  • Complementando todas as sugestões postadas, sugiro a seguinte sintaxe:

     

    SELECT 
      b.n_bloquete,m.descricao
    
    FROM 
      boletocooperado b, movimento_banco m
    
    WHERE
      b.n_bloquete like '%' || m.descricao || '%'
    

    Ou, ainda, 

    SELECT 
      b.n_bloquete,m.descricao
    
    FROM 
      boletocooperado b, movimento_banco m
    
    WHERE
      m.descricao like '%' || b.n_bloquete || '%'
    Considerando, nessa segunda sugestão, que o campo m.descricao contenha um texto com b.n_bloquete no meio. Na primeira sugestão, o contrário.

    Sds.,

     


    Daniel Ethur Porto Alegre/RS
    • Editado Daniel Ethur quarta-feira, 24 de novembro de 2010 19:51 Acrescentei a segunda sugestao.
    • Marcado como Resposta Eder Costa segunda-feira, 27 de dezembro de 2010 12:23
    quarta-feira, 24 de novembro de 2010 19:46
  • Ricardo

    o uso de likes não tem boa performance... depedendo do tamanho de sua tabela e do quantidade de consultas um full-text poderia seria melhor que o like (é mais hardcore :D)

    mas verifique as indexações em sua tabela...

    Outro detalhe é ao usar o like vc depende do que o usuário vai digitar se ele digitar apenas a letra "A" vai te retornar praticamente todos os registros de sua tabela... este filto deve ser mais restritivo possível

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Sugerido como Resposta Eder Costa quinta-feira, 23 de dezembro de 2010 13:29
    • Marcado como Resposta Eder Costa segunda-feira, 27 de dezembro de 2010 12:23
    quinta-feira, 25 de novembro de 2010 11:09
    Moderador
  • Marcelo fiz varial queries q tiveram o mesmo resultado e n demoro:

    SELECT lancamentoid_ref,n_bloquete,sum(valorPago) as valorpago FROM

                                                                                                                                                 (

                                                                                                                                                 SELECT boleto.lancamentoid_ref,b.n_bloquete,valorPago

                                                                                                                                                 FROM boletocooperado b

                                                                                                                                                 INNER JOIN (SELECT descricao,lancamentoid_ref FROM movimento_banco) as boleto

                                                                                                                                                 ON substring(boleto.descricao,17,9) in (cast(cast(b.n_bloquete as int) as char(9)))

                                                                                                                                                 UNION SELECT boleto.lancamentoid_ref,b.n_bloquete,valorPago

                                                                                                                                                 FROM boletocooperado b

                                                                                                                                                 INNER JOIN (SELECT descricao,lancamentoid_ref FROM movimento_banco) as boleto

                                                                                                                                                 ON substring(boleto.descricao,17,8) in (cast(cast(b.n_bloquete as int) as char(8)))

                                                                                                                                                 UNION SELECT boleto.lancamentoid_ref,b.n_bloquete,valorPago

                                                                                                                                                 FROM boletocooperado b

                                                                                                                                                 INNER JOIN (SELECT descricao,lancamentoid_ref FROM movimento_banco) as boleto

                                                                                                                                                 ON substring(boleto.descricao,17,7) in (cast(cast(b.n_bloquete as int) as char(7)))

                                                                                                                                                 UNION SELECT boleto.lancamentoid_ref,b.n_bloquete,valorPago

                                                                                                                                                 FROM boletocooperado b

                                                                                                                                                                 INNER JOIN (SELECT descricao,lancamentoid_ref FROM movimento_banco) as boleto

                                                                                                                                                 ON substring(boleto.descricao,17,6) in (cast(cast(b.n_bloquete as int) as char(6)))

                                                                                                                                                 UNION SELECT boleto.lancamentoid_ref,b.n_bloquete,valorPago

                                                                                                                                                 FROM boletocooperado b

                                                                                                                                                 INNER JOIN (SELECT descricao,lancamentoid_ref FROM movimento_banco) as boleto

                                                                                                                                                 ON substring(boleto.descricao,17,5) in (cast(cast(b.n_bloquete as int) as char(5)))

                                                                                                                                                 ) as Bloquete

                                                                                                                                 Group by n_bloquete,lancamentoid_ref

     

     

     

    quinta-feira, 25 de novembro de 2010 14:23
  • Ricardo,

    no seu script vc vc um substring e procura por aquele trecho... evitando o like... e possivelmente vc deve ter um indice no campo b.n_bloquete.... o ruim desta solução é que seu script fica muito grande e se vc aumentar o a coluna com mais um número de bloquete vai ter que alterar o script

    como são gravados os dados nesta coluna boleto.descrição?

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quinta-feira, 25 de novembro de 2010 14:32
    Moderador
  • Agora estou tentando colocar esse trecho acima nessa outra query e está dando o seguinte erro:

     

    Mensagem 8120, Nvel 16, Estado 1, Linha 1

    Column 'Movimento_Banco.LancamentoID_Ref' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

     

    Segue a Query

     

     

    SELECT ID, banco, AGENCIA, CONTA, Pagamento, nome, SUM(ENTRADAS) AS Entradas, SUM(SAIDAS) AS Saidas

    FROM (

                SELECT Pagamento = Case When (A.DataHoraOld is null) Then A.DataHora Else A.dataHoraOld End,

                          Entradas = (case when (substring(a.descricao,1,12) = 'Baixa boleto') Then (SELECT movimento.valorpago

    FROM

     (

          SELECT lancamentoid_ref,n_bloquete,sum(valorPago) as valorpago FROM

                                                         (

                                                         SELECT boleto.lancamentoid_ref,b.n_bloquete,valorPago

                                                         FROM boletocooperado b

                                                         INNER JOIN (SELECT descricao,lancamentoid_ref FROM movimento_banco) as boleto

                                                         ON substring(boleto.descricao,17,9) in (cast(cast(b.n_bloquete as int) as char(9)))

                                                               UNION SELECT boleto.lancamentoid_ref,b.n_bloquete,valorPago

                                                         FROM boletocooperado b

                                                         INNER JOIN (SELECT descricao,lancamentoid_ref FROM movimento_banco) as boleto

                                                               ON substring(boleto.descricao,17,8) in (cast(cast(b.n_bloquete as int) as char(8)))

                                                               UNION SELECT boleto.lancamentoid_ref,b.n_bloquete,valorPago

                                                         FROM boletocooperado b

                                                               INNER JOIN (SELECT descricao,lancamentoid_ref FROM movimento_banco) as boleto

                                                               ON substring(boleto.descricao,17,7) in (cast(cast(b.n_bloquete as int) as char(7)))

                                                               UNION SELECT boleto.lancamentoid_ref,b.n_bloquete,valorPago

                                                               FROM boletocooperado b

                                                               INNER JOIN (SELECT descricao,lancamentoid_ref FROM movimento_banco) as boleto

                                                               ON substring(boleto.descricao,17,6) in (cast(cast(b.n_bloquete as int) as char(6)))

                                                               UNION SELECT boleto.lancamentoid_ref,b.n_bloquete,valorPago

                                                         FROM boletocooperado b

                                                               INNER JOIN (SELECT descricao,lancamentoid_ref FROM movimento_banco) as boleto

                                                               ON substring(boleto.descricao,17,5) in (cast(cast(b.n_bloquete as int) as char(5)))

                                                         ) as Bloquete

                                                   Group by n_bloquete,lancamentoid_ref

    ) Movimento

    Where movimento.lancamentoid_ref = a.lancamentoid_ref

          ) 

                                                                                                                           Else (select a.valor) end),

                          0 AS SAIDAS,

                          A.Descricao AS nome,

                          B.BancoId AS ID,

                          B.Nome AS banco,

                          B.Agencia AS AGENCIA,

                          B.Conta AS CONTA

              FROM    Movimento_Banco A INNER JOIN Bancos B ON A.Bancoid = B.BancoId 

                          INNER JOIN FIN_LANCAMENTOSIMPLES F ON F.LANCAMENTOID = A.LANCAMENTOID

                         

                WHERE Case When (F.DataLancamentoOld is null) Then F.DataLancamento Else F.DataLancamentoOld End >= '2010-10-19'

                          AND Case When (F.DataLancamentoOld is null) Then F.DataLancamento Else F.DataLancamentoOld End < '2010-11-25'

                          AND (A.Valor > 0) AND ISNULL(A.Estornada, 0) = 0  

                          AND a.bancoid = '1'

                GROUP BY B.BancoId, A.Datahora,A.DataHoraOld, A.Descricao, B.Nome, B.Agencia, B.Conta,a.valor

                UNION SELECT Pagamento =Case When (A.DataHoraOld is null) Then A.DataHora Else A.dataHoraOld End,

                            0 AS ENTRADAS,

                            (

                                 SELECT abs(a.valor)) AS SAIDAS,

                                       A.Descricao AS nome,

                                       B.BancoId AS ID,

                                       B.Nome AS banco,

                                       B.Agencia AS AGENCIA,

                                       B.Conta AS CONTA

                                 FROM Movimento_Banco A INNER JOIN Bancos B ON A.Bancoid = B.BancoId 

                                       INNER JOIN FIN_LANCAMENTOSIMPLES F ON F.LANCAMENTOID = A.LANCAMENTOID 

                                 WHERE  Case When (F.DataLancamentoOld is null) Then F.DataLancamento Else F.DataLancamentoOld End >= '2010-11-19'

                                       AND Case When (F.DataLancamentoOld is null) Then F.DataLancamento Else F.DataLancamentoOld End < '2010-11-25'

                                        AND (A.Valor < 0) and ISNULL(A.Estornada, 0) = 0  

                                       AND a.bancoid = '1'

                                 GROUP BY B.BancoId, A.Datahora,A.DataHoraOld, A.Descricao, B.Nome, B.Agencia, B.Conta,a.valor

          ) DERIVEDTBL

    GROUP BY ID, banco, AGENCIA, CONTA, Pagamento, nome

     

     

     

     

     

    quinta-feira, 25 de novembro de 2010 14:33
  • Ricardo,

    Vc deve incluir os campos movimento.lancamentoid_ref = a.lancamentoid_ref no group by...

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Sugerido como Resposta Eder Costa quinta-feira, 23 de dezembro de 2010 13:29
    • Não Sugerido como Resposta Eder Costa segunda-feira, 27 de dezembro de 2010 12:23
    quinta-feira, 25 de novembro de 2010 14:39
    Moderador
  • Olá Ricardo!

    Você obteve progresso?

    Att.


    Eder Costa - LATAM Forum Support Engineer
    Microsoft Corporation
    quinta-feira, 16 de dezembro de 2010 17:29