簡體   English   中英

在SQL中選擇動態日期范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM