如何在 SQL Server 中获取前 12 个月的数据并避开当前月份

时间:2021-04-01 15:26:38

标签: sql-server

我的表中有一个名为 Sale Date 的列,我想获取没有当前月份的 12 个月数据。即,由于我们是2021年4月,查询需要显示2020年4月到2021年3月的数据,where子句中的条件应该是什么。

6 个答案:

答案 0 :(得分:1)

以下应该有效,计算结果为 >='2020-04-01 00:00:00.000'<'2021-04-01 00:00:00.000'(包括到 3 月底 23:59:59)

where Datecolumn >=DateAdd(month, DateDiff(month, 0, DateAdd(month,-12,GetDate())), 0)
and dateColumn < DateAdd(month, DateDiff(month, 0, GetDate()), 0)

答案 1 :(得分:0)

试试这个。

where DATEDIFF(MM,SaleDate,GETDATE())<=12
and SaleDate < DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)

答案 2 :(得分:0)

WHERE SaleDate >= DATEADD(year, -1, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1))
  AND SaleDate < DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1)

假设我们在 15 April 2021

在这种情况下,DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1) 返回 1 April 2021DATEADD(year, -1, ... 返回 1 April 2020

因为我们有一个半开区间 >= AND <,所以我们可以得到从正好 1 April 2020 00:00:00但不包括 1 April 2021 00:00:00 的周期。

答案 3 :(得分:0)

这是你想要的吗? (4/1/2020 和 3/31/2021)

Select * FROM TBL1
WHERE SalesDate > DATEADD(YEAR, -1,  CONVERT(DATE,DATEADD(MM, DATEDIFF(MM, 0, 
GETDATE()), 0)))
and SalesDate < CONVERT(DATE,DATEADD(MS, -3, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) , 
0))) 

答案 4 :(得分:0)

今天的日期 = getdate()。 本月第一天的日期(四月的第一天)= convert(datetime, concat(year(getdate()), '-', month(getdate()), '-01'), 120).这是您的结束日期。开始日期比结束日期早 12 个月 = dateadd(month, -12, ...)。 所以这是你的 where 子句...

where [sale date] >= dateadd(month, -13, convert(datetime, concat(year(getdate()), '-', month(getdate()), '-01'), 120))
and [sale date] < convert(datetime, concat(year(getdate()), '-', month(getdate()), '-01'), 120)

答案 5 :(得分:0)

比所有发布的答案更简单的方法:

WHERE
  saledate >= dateadd(d,1,eomonth(getutcdate(),-13)) AND
  saledate < dateadd(d,1,eomonth(getutcdate(),-1))

如果 saledate 只是日期而不是时间,那就更简单了:

WHERE
  saledate > eomonth(getutcdate(),-13) AND
  saledate <= eomonth(getutcdate(),-1)

注意;如果您的日期未以 UTC 格式存储(它们可能应该是),则使用 GetDate() 而不是 GetUTCDate()