在SQL中选择动态日期范围

时间:2019-01-04 15:43:07

标签: sql sql-server tsql

我有一个查询,该查询根据其活动日期带来数据。查询如下:

where al.ACTIVITY_DATE between '2017-01-01 00:00:00.000' and '2018-12-01 00:00:00.000'

它选择所有活动都在此数据范围内。

现在,从2019年开始,我需要在日期范围内进行更改,为2019-12-01 00:00:00:.000

我不想做的是每年手动对该报告进行更改。是否可以选择最近2年的数据以及今年至2019年12月31日的数据?

2 个答案:

答案 0 :(得分:3)

只需执行以下操作:

WHERE al.ACTIVITY_DATE BETWEEN DATEADD(yy,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))
                           AND DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1)

这将使它成为最近两年的动态。

这是上一年的开始

DATEADD(yy,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))

这是今年的年底。

DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1)

答案 1 :(得分:0)

我认为这是得出去年初的最简单方法:

DECLARE @start date = DATEFROMPARTS(YEAR(GETDATE())-1,1,1);

-- 2018-01-01

然后这是对去年和今年进行全日期范围查询的最简单方法,而不必担心数据类型,舍入等(read this to see why BETWEEN is a bad idea)。

...
WHERE al.ACTIVITY_DATE >= @start 
  AND al.ACTIVITY_DATE <  DATEADD(YEAR, 2, @start); -- 2020-01-01