Sql-Server

選擇前 12 到 9 個月範圍內的日期

  • May 7, 2020

我需要幫助選擇前 12 到 9 個月之間的日期。例如,如果今天是 2017 年 2 月 22 日,我需要將日期範圍從 2016 年 2 月 1 日拉到 2016 年 3 月 31 日。

我可以使用以下方法選擇過去 12 個月的所有日期:

WHERE READDATE >= DATEADD(month, DATEDIFF(month, 0, DATEADD(MONTH,-12,GETDATE())), 0)
AND READDATE <= DATEADD(s,-12,DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE()),0)) 

但我不知道如何排除前 9 個月之後的日期,給我 3 個月的視窗。

這應該有效:

...
WHERE 
   -- >= 2016-02-01 00:00:00.000
   READDATE >= DATEADD(month, DATEDIFF(month, 0, GETDATE()) - 12, 0)
   -- < 2016-04-01 00:00:00.000
   READDATE < DATEADD(month, DATEDIFF(month, 0, GETDATE()) - 10, 0) 
...

請注意,對於日期,通常最好以這種方式進行比較:

X >= lower bound
   AND
X < upper bound

這就是為什麼我更改<= '20160331'< '20160401'. 雖然使用似乎是 DATE 類型的樣本可以正常工作,但使用帶有 TIME 部分的日期可能會給出不正確的結果。

引用自:https://dba.stackexchange.com/questions/165188