2013-06-28 691 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)