ssis - 获取过去 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。这是我的日期在表格中显示的方式。
提前致谢
解决方案
如果 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 服务器,答案可能会有所不同。
推荐阅读
- python - python中N体问题的矢量化耦合ODE
- php - 如何修复此访问数组布尔错误
- c# - 如何使用 System.Text.Json 库异步反序列化?
- kotlin - 如何转换流
- > 流动
在科特林? - react-native - React native:axios 请求上可能出现未处理的 Promise Rejection
- python - 按日期列合并 2 个数据框(无前瞻偏差)
- excel - 管理 talend 中的 excel 文件列表
- javascript - 循环内的 setTimeout 运行代码 1 次然后等待并重复
- webpack - 使用 aws-lambda 构建无服务器 apollo-server 失败
- mysql - 如何使用 python flask MySql Db 调试您的查询?