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