sql查询以获取最近6个月的数据

sql查询以获取最近6个月的数据,sql,db2,sas,enterprise-guide,Sql,Db2,Sas,Enterprise Guide,我正在努力获取过去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:

我正在努力获取过去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

请给出建议。

在DB2中,它应该是

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

其中TIMESTAMPDIFF(64,CAST(CURRENT_TIMESTAMP-d_date AS CHAR(22))基于安德烈的鹰眼,这里是(我认为)DB2语法:

WHERE d_date > current_date - 6 MONTHS
在DB2中镜像DATEADD是一个非常好的函数

此外,由于您提到了SAS,以下是执行相同操作的SAS语法:

WHERE d_date > intnx('MONTH', today(), -6, 'SAME');
虽然您说您正在使用SAS Enterprise Guide运行此向导,但您显示的语法不是SAS。您收到的错误消息表明您正在直接向数据库提交“pass-thru”代码

你也可以试试这个

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

我在代码中使用了以下内容:

插入员工(I_EMP、T_CRT、C_系统、D_雇佣) 值(21,当前时间戳,10,当前日期-6个月

这是在DB2中实现的,它可以正常工作


希望这会有所帮助。

错误消息清楚地表明,要向其传递查询的服务器不是SQL server(如标记中所示),而是DB2。您需要参考DB2SQL手册来了解如何使用该产品中的日期。示例中的
DATEADD()
语法是SQL Server,而不是DB2。我添加SAS的唯一原因是因为我在《SAS企业指南》中编写了此查询。出现以下错误:错误:CLI prepare error:[IBM][CLI Driver][DB2]SQL0171N例程“-”位置“2”的参数的数据类型、长度或值不正确。参数名称:“”。SQLSTATE=42815使用了这个方法,它可以在(当前日期-(当前日期)-1)天-1个月)和(当前日期-天(当前日期)天)之间的d_日期工作,这不仅是不必要的复杂解决方案,而且我想知道查询引擎是否能够优化这么多。而@BellevueBob给出的表达式更容易被认为是确定性计算。这个答案的第一部分是最好的。不要乱创建DATEADD类型函数,当内置功能可以正常工作时,我可以在《SAS企业指南》中运行它。其中d_日期>当前_日期-6个月。。。。这很有效。令人惊叹的。非常感谢。位于的DB2 SQL参考