Usuário com melhor resposta
Ajuda com o LIKE

Pergunta
-
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 FernandesMCP, 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
-
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
-
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 FernandesMCP, 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
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 FernandesMCP, 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
-
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)
-
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. -
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
-
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 FernandesMCP, 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
-
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
-
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 FernandesMCP, MCDBA, MCSA, MCTS.
Se útil, classifique!!!
Me siga no twitter: @marcelodba -
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
-
Ricardo,
Vc deve incluir os campos movimento.lancamentoid_ref = a.lancamentoid_ref no group by...
att.
Marcelo FernandesMCP, 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
-