2013-06-28 700 views
0

我想獲取過去6個月的數據。SQL查詢獲取最近6個月的數據

這是我用什麼:

WHERE d_date > DATEADD(m, -6, current_timestamp) 

,我得到這個錯誤。

ERROR: CLI prepare error: SQL0206N "M" is not valid in the context where it is used 

也試過

WHERE d_date > current date -180 

,並得到這個錯誤:

ERROR: CLI prepare error: SQL0171N The data type, length or value of the argument for the parameter in 
    position "2" of routine "-" is incorrect. Parameter name: "". SQLSTATE=42815 

請指點。

+2

錯誤信息清楚地表明,服務器到您傳遞查詢不是SQL Server中,當你在標籤說明,但DB2。您需要參考DB2 SQL手冊來了解如何處理該產品中的日期。您示例中的'DATEADD()'語法是SQL Server,而不是DB2。 –

+0

我添加SAS的唯一原因是因爲我在sas企業指南中編寫了這個查詢。 – learnlearn10

回答

3

基於舍甫琴科的鷹的眼睛,這裏是(我認爲)的DB2語法:

WHERE d_date > current_date - 6 MONTHS 

而且here is a link到一個相當不錯的功能,在DB2鏡像DATEADD。

而且,既然您提到的SAS,這裏是SAS語法做同樣的事情:

WHERE d_date > intnx('MONTH', today(), -6, 'SAME'); 

雖然你說你是用SAS Enterprise Guide中運行這個,你看語法不SAS。您收到的錯誤消息表明您正在將「傳遞」代碼直接提交給數據庫。

+0

這個答案的第一部分是最好的。不要亂創建一個DATEADD類型的函數,當內置的功能可以正常工作,並且可以是 – WarrenT

+0

我正在SAS Enterprise Guide中運行這個功能。 WHERE d_date> current_date - 6個月......這個工作。真棒。謝謝 ! – learnlearn10

0

在DB2中,它應該像

WHERE TIMESTAMPDIFF(64, CAST(CURRENT_TIMESTAMP- d_date AS CHAR(22))) <= 6 

刪除SQLServer的標籤,這對MS SQLServer的問題。

+0

出現此錯誤:錯誤:CLI準備錯誤:[IBM] [CLI驅動程序] [DB2] SQL0171N例程「 - 」的位置「2」中參數 位置的參數的數據類型,長度或值不正確。參數名稱:「」。 SQLSTATE = 42815 – learnlearn10

+0

用這個和它的作品 WHERE d_date BETWEEN (當前日期 - (DAY(當前日期) - 1)天 - 1月) AND(當前日期 - DAY(當前日期)DAYS) – learnlearn10

+1

這不僅是解決方案不必要地令人費解,但我不知道查詢引擎是否能夠優化這麼多。而@BellevueBob給出的表達式更容易被確認爲確定性計算。 – WarrenT

1

你也可以試試這個

SELECT * 
From PIS.dbo.PIS_tblEmployeeGenInfo 
WHERE dtJoiningDate > DATEADD(m, -6, current_timestamp)