[英]Selecting Dynamic date range in sql
我有一個查詢,該查詢根據其“活動”日期帶來數據。 查詢如下:
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
。
我不想做的是每年手動對該報告進行更改。 是否可以選擇最近兩年的數據以及截至2019年12月31日的今年數據?
只要這樣做:
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)
我認為這是得出去年初的最簡單方法:
DECLARE @start date = DATEFROMPARTS(YEAR(GETDATE())-1,1,1);
-- 2018-01-01
然后,這是對去年和今年進行全日期范圍查詢的最簡單方法,而不必擔心數據類型,舍入等問題(請閱讀BETWEEN
以了解BETWEEN
為什么是個壞主意 )。
...
WHERE al.ACTIVITY_DATE >= @start
AND al.ACTIVITY_DATE < DATEADD(YEAR, 2, @start); -- 2020-01-01
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.