sql查询以获取最近6个月的数据
我正在努力获取过去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:
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参考