簡體   English   中英

在SQL中將過濾器應用於將來的日期

[英]Apply filter to future dates in sql

我有這樣的日期欄

1. 01-Mar-2012
2. 01-Apr-2012
3. 01-May-2012
4. 01-Jun-2012
5. 01-Jul-2012
6. 01-Aug-2012
7. 01-Sep-2012
8. 01-Oct-2012
9. 01-Nov-2012
10. 01-Dec-2012
11. 01-Jan-2013
12. 01-Mar-2013
13. 01-Apr-2013
14. 01-May-2013
15. 01-Jun-2013
16. 01-Jul-2013
17. 01-Aug-2013
18. 01-Sep-2013
19. 01-Oct-2013
20. 01-Nov-2013
21. 01-Dec-2013

我只想對數據應用過濾器,以使記錄在2013年的某個月(現在說四月)停止。

我已經嘗試了以下內容,但沒有想到最后一部分:

WHERE DATEPART(year, Q.TermDate) <= DATEPART(year, DATEADD(YEAR, 1, GETDATE())) 
AND DATEPART(MONTH, Q.TermDate) <= ...)

任何人都可以提出建議嗎?

如果這些已經是日期時間,則只需使用<=

SELECT * FROM TABLE WHERE TermDate <= '01-Apr-2013'

您可以這樣編寫語句:

WHERE CONVERT(VARCHAR(6),TermDate,112) <= '201304'

但這不會使用您在TermDate列上可能擁有的任何索引。 因此,您可以執行以下操作:

WHERE TermDate < '20130501'

非常坦率的;

SELECT * FROM Q WHERE TermDate<'2013-04-01';

演示在這里

假設年份和月份參數:

DECLARE @siYear smallint
DECLARE @tiMonth tinyint
SET @siYear = 2013
SET @tiMonth = 4

SELECT
  MyTable.MyDateValue
FROM
  MyTable
WHERE
  MyTable.MyDateValue <= CAST(RIGHT('0000' + CAST(@siYear AS varchar(4)), 4) + '-' + RIGHT('00' + CAST(@tiMonth AS varchar(2)), 2) + '-01' AS datetime)

對於我認為日期邊界為<= vs <的讀者,請將謂詞更改為:

WHERE
      MyTable.MyDateValue < DATEADD(day, 1, CAST(RIGHT('0000' + CAST(@siYear AS varchar(4)), 4) + '-' + RIGHT('00' + CAST(@tiMonth AS varchar(2)), 2) + '-01' AS datetime))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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