SSIS OLE DB源编辑器日期筛选Where子句问题求助
解决DB2到SSIS的日期筛选问题
你的问题核心是用了SQL Server的函数语法来操作DB2数据库,DB2不支持GETDATE()、CONVERT()这类SQL Server专属函数,必须改用DB2原生的日期处理函数。以下是两种可行的解决方案:
方案1:将日期条件转为数字格式(推荐,性能更优)
直接把“近12个月的起始日期”转成和OrdDate同类型的数字,避免转换表字段,能利用OrdDate上的索引:
SELECT * FROM Orders WHERE OrdDate >= INTEGER(CHAR(ADD_MONTHS(CURRENT_DATE, -12), ISO))
CURRENT_DATE:DB2获取当前日期的函数ADD_MONTHS(CURRENT_DATE, -12):计算当前日期往前推12个月的日期CHAR(..., ISO):将日期转为YYYYMMDD格式的字符串INTEGER():把字符串转为数字,和OrdDate(Numeric(8,0))做数值比较
方案2:将表字段转为日期格式
如果不需要考虑索引性能,也可以把OrdDate转成DB2的日期类型后再比较:
SELECT * FROM Orders WHERE DATE(CHAR(OrdDate)) >= ADD_MONTHS(CURRENT_DATE, -12)
CHAR(OrdDate):把数字类型的日期转为YYYYMMDD字符串DATE():将字符串转为DB2的日期类型ADD_MONTHS(CURRENT_DATE, -12):同样是12个月前的日期
为什么之前的语句报错?
你用的GETDATE()、CONVERT(..., 112)都是SQL Server的专属语法,DB2无法识别这些函数和参数,所以执行时会报错。只要替换成DB2对应的函数即可解决问题。
内容的提问来源于stack exchange,提问作者user25174201
相关产品推荐
相关产品推荐

