Utilizar o DateAdd para fazer filtros no Where no SQL Server

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.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

4 Responses

  1. Armando Neto disse:

    Show.
    Valeu a dica.

  2. Humberto disse:

    Dateadd é melhor que o datediff em filtros ?

Deixe uma resposta