首页 > 解决方案 > 获取过去 7 天的数据 DB2

问题描述

我以前没有使用 DB2 的经验,而且我有点陷入困境。我正在研究一个从 DB2 读取的 SSIS 项目,我在其中写入一个平面文件。我需要每周运行该流程并获取过去 7 天的数据。

我的查询是这样工作的:

Select * From Table
Where ServiceDate >= 2200624 -  7

上面的查询带来了过去 7 天的数据,但是这个查询对我不起作用,因为我需要每周执行这个过程。我需要这样的东西:

Select * From Table
Where ServiceDate >= DATE(CURRENT_DATE - 7 DAY)

第二个查询抛出错误,还有其他方法可以实现吗?我正在使用 ODBC 源,我正在考虑在 SSIS 中使用动态查询,但我不确定这在 ODBC 源中如何工作,任何建议或帮助将不胜感激。

编辑:这个表是很久以前创建的,所以我没有关于这些表的数据类型的任何信息。

实际日期 2200624 对应于 20200624。这是我的日期在表格中显示的方式。

提前致谢

标签: ssisdb2

解决方案


如果 ServiceDate 是 CHAR(7) 或等效值,并且2200624根据您编辑的问题,如果值对应于 YYYYMMDD 日期 20200624,那么以下示例可能会有所帮助。

它假定以第一个字符开头的 ServiceDate 值1是 20 世纪(19xx年),第一个字符的日期2是 21 世纪。

SELECT ... FROM ... WHERE ( TO_DATE(CASE SUBSTR(ServiceDate,1,1) WHEN '1' THEN '19'||SUBSTR(ServiceDate,2,6) WHEN '2' THEN '20'||SUBSTR(ServiceDate,2,6) END,'YYYYMMDD')) >= CURRENT DATE - 7 DAYS

这会表现得很糟糕,所以不要使用它!

另一种性能更好的方法是转换CURRENT DATE - 7 DAYS为与您的存储格式匹配的数字,如下所示:

...WHERE ServiceDate >= '2'||substr(TO_CHAR(CURRENT_DATE - 7 DAY, 'YYYYMMDD'),2,6)

如果 ServiceDate 是 INTEGER 列数据类型,则:

...WHERE ServiceDate >= int('2'||substr(TO_CHAR(CURRENT_DATE - 7 DAY, 'YYYYMMDD'),2,6))

在寻求有关 Db2 的帮助时,请始终说明您的 Db2 服务器平台(Z/OS、i 系列、Linux/Unix/Windows),因为根据平台 + 版本的 Db2 服务器,答案可能会有所不同。


推荐阅读