Usuário com melhor resposta
Melhorar o LIKE

Pergunta
-
Prezados boa tarde!
Na SQl abaixo eu tenho o resultado que preciso, porem eu preciso colocar um condicção no LIKE, vejam
SQL
SELECT TI.IDOBJOFICINA AS 'OBJETO',
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 1 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'JAN',
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 2 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'FEV',
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 3 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'MAR',
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 4 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'ABR',
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 5 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'MAIO',
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 6 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'JUN',
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 7 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'JUL' ,
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 8 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'AGOST',
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 9 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'SETEM' ,
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 10 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'OUT',
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 11 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'NOV',
COALESCE(CONVERT(VARCHAR,SUM(CASE WHEN MONTH(T.DATAEMISSAO) = 12 THEN TI.QUANTIDADE * TI.PRECOUNITARIO END),1),'0') AS 'DEZ' ,
TOTAL_ANO = Sum(Case When (Year(T.DATAEMISSAO) = Year(GetDate()) ) Then (TI.QUANTIDADE * TI.PRECOUNITARIO) End)
FROM TITMMOV AS TI
INNER JOIN TMOV AS T ON T.CODCOLIGADA = TI.CODCOLIGADA AND T.IDMOV = TI.IDMOV
INNER JOIN TPRD AS P ON P.CODCOLIGADA = TI.CODCOLIGADA AND P.IDPRD = TI.IDPRD
WHERE T.CODTMV IN ('1.2.01','1.2.11','1.2.12','1.2.09','1.2.18')
AND TI.IDOBJOFICINA IS NOT NULL
AND YEAR(T.DATAEMISSAO) = '2012'
AND T.CODFILIAL = '1'
AND P.CODIGOPRD LIKE '05.06%'GROUP BY TI.IDOBJOFICINA
ORDER BY TI.IDOBJOFICINAestou usando essa condição AND P.CODIGOPRD LIKE '05.06%' porem eu preciso que alguma coisa mais ou menos com >= and <= porem usando essa condição 05.06%
nesse formato.
obrigado a todos
Respostas
-
Opa, ficou melhor sim,então ja que voce tem uma padrão que seria o xx.xx e voce não quer utilizar o like, voce poderia usar o left:
left(P.CODIGOPRD,5) = '05.06'
Ou então um substring:
substring(P.CODIGOPRD,1,5) = '05.06'
Tente testar essas opções e veja se é o que voce queria...como voce não quer o like, voce precisa filtrar uma parte do texto que no caso seriam os 5 primeiros caracteres conforme acima.
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Sugerido como Resposta Alexandre Matayosi terça-feira, 23 de outubro de 2012 12:14
- Marcado como Resposta Ronnie Von terça-feira, 23 de outubro de 2012 17:02
-
Ronnie,
Concordo plenamente como Alexandre, seria mais indicado e performático utilizar tanto a Função SubString ou Left para trabalhar com esta parte de seu campo, ainda mais por você ter uma padrão e tamanho específico.
Quando utilizamos o Like, o SQL Server entende que temos que selecionar partes dos dados que estão sendo armazenados em suas colunas caracteres de acordo com o caracter coringa, o processo de pesquisa e identificação do Like é bastante questionável e em algumas situações acaba se tornando o gargalo no processamento da Query.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Marcado como Resposta Ronnie Von terça-feira, 23 de outubro de 2012 17:02
Todas as Respostas
-
Boa tarde Ronnie Von, voce pode passar alguns exemplos dos dados que tem na coluna CODIGOPRD ? se os 5 primeiros caracteres da coluna foram o 05.06 voce poderia utilizar left(P.CODIGOPRD,5) = '05.06'.
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
-
Desculpas Alexandre segue as informaçoes;
nessa tabela codigoprd temos;
01.04
01.04.00001
01.04.00002
01.05
01.05.00001
01.05.00002
01.06
01.06.00001
01.06.00002
02.01
02.01.00001
02.01.00002
02.02
02.02.00001
02.02.00002
tipo eu preciso buscar por esses grupos primeiro nivel
xx.xx
ficou melhor assim?
-
Opa, ficou melhor sim,então ja que voce tem uma padrão que seria o xx.xx e voce não quer utilizar o like, voce poderia usar o left:
left(P.CODIGOPRD,5) = '05.06'
Ou então um substring:
substring(P.CODIGOPRD,1,5) = '05.06'
Tente testar essas opções e veja se é o que voce queria...como voce não quer o like, voce precisa filtrar uma parte do texto que no caso seriam os 5 primeiros caracteres conforme acima.
Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.
- Sugerido como Resposta Alexandre Matayosi terça-feira, 23 de outubro de 2012 12:14
- Marcado como Resposta Ronnie Von terça-feira, 23 de outubro de 2012 17:02
-
Ronnie,
Concordo plenamente como Alexandre, seria mais indicado e performático utilizar tanto a Função SubString ou Left para trabalhar com esta parte de seu campo, ainda mais por você ter uma padrão e tamanho específico.
Quando utilizamos o Like, o SQL Server entende que temos que selecionar partes dos dados que estão sendo armazenados em suas colunas caracteres de acordo com o caracter coringa, o processo de pesquisa e identificação do Like é bastante questionável e em algumas situações acaba se tornando o gargalo no processamento da Query.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Marcado como Resposta Ronnie Von terça-feira, 23 de outubro de 2012 17:02
-