Hoje vou mostrar como fazer um filtro no SQL subtraindo dias direto na consulta.
Algumas vezes precisamos fazer queries comparando valores de 1 semana atrás, 1 mês atrás, ou até mais tempo. E como fazemos isso sem precisar ficar abrindo a calculadora e calculando os dias?
Simples, no SQL Server, existe a função DateAdd, onde você adiciona dias em uma data, e assim você pode adicionar um número negativo para subtrair, então por exemplo, se quisermos subtrair noventa dias da data atual, veja como ficaria:
SELECT GETDATE() AS [Data de Hoje], DATEADD(DAY, -90, GETDATE()) AS [Data de Hoje - 90 Dias], CONVERT(VARCHAR, DATEADD(DAY, -90, GETDATE()), 112) AS [Data de Hoje - 90 Dias, no padrão YYYYMMDD]
Supondo então que se nós precisamos fazer um filtro em uma tabela do Protheus, pegando as vendas dos últimos 10 dias, ficaria dessa forma:
SELECT
F2_DOC,
F2_CLIENTE,
F2_EMISSAO,
F2_VALMERC
FROM
SF2010 SF2
WHERE
F2_FILIAL = '01'
AND F2_EMISSAO >= CONVERT(VARCHAR, DATEADD(DAY, -10, GETDATE()), 112) -- Data De (Dia de Hoje menos 10)
AND F2_EMISSAO <= CONVERT(VARCHAR, GETDATE(), 112) -- Data Até (Dia de Hoje)
AND F2_TIPO NOT IN ('B', 'D')
AND SF2.D_E_L_E_T_ = ' '
Referência:
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Show.
Valeu a dica.
Opa, eu que agradeço o comentário Armando.
Grande abraço.
Dateadd é melhor que o datediff em filtros ?
Então Humberto, eu nunca estudei uma comparação entre os dois comandos.
Mas achei um artigo, segue o link: https://www.sqlservercentral.com/blogs/datediff-vs-dateadd