我的表中有一个名为 Sale Date
的列,我想获取没有当前月份的 12 个月数据。即,由于我们是2021年4月,查询需要显示2020年4月到2021年3月的数据,where子句中的条件应该是什么。
答案 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 2021
,DATEADD(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()