在SQL

2012-02-21 41 views
1

將過濾器應用於將來的日期我有這樣在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) <= ...) 

誰能請給個建議?

+0

這聽起來像OP要採取一個月作爲參數,並基於該整數的邏輯。 – 2012-02-21 20:49:33

回答

1

假設一個年份和月份參數:

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)) 
+0

非常感謝。 – Zolt 2012-02-21 21:06:30

+1

只需稍作修改即可滿足需要。再次感謝。 WHERE Q.TermDate <= CAST(CAST(RIGHT('0000'+ CAST(DATEPART(YEAR,DATEADD(YEAR,1,GETDATE()))AS VARCHAR(4)),4)+' - '+ RIGHT 00'+ CAST(DATEPART(MONTH,DATEADD(MONTH,1,GETDATE()))AS VARCHAR(4)),4)+'-01'AS VARCHAR)AS DATETIME) – Zolt 2012-02-21 21:23:26

2

如果這些已經日期時間,就用一個< =

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

這不是Oracle。我們嘗試使用ISO-8601。 WHERE TermDate <='2013-04-01'/ *順便說一句,我傾向於使用WHERE TermDate <'2013-04-02',而不是平等,以便'2013-04-01 11:00'在這種情況下,而<=可能會引入錯誤。這取決於源數據*/ – 2012-02-21 20:42:52

+0

我只是堅持這個例子,但是,是的,日期應該寫在更標準的意義上。系統應該能夠解釋它,雖然 – 2012-02-21 20:44:32

1

你可以寫你的聲明是這樣的:

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

但這不會使用,你可以對任何索引你的TermDate專欄。所以你可以這樣做:

WHERE TermDate < '20130501' 
1

相當簡單;

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

演示here

+0

尼斯演示。我喜歡。 – 2012-02-21 20:52:47