首页 > 解决方案 > 从相当老的 IBM iseries AS400 DB2 查询数据(日期格式问题)

问题描述

我是从数据库查询数据的新手,现在我在非常旧的(我不知道确切版本)IBM iSeries AS400 DB2 数据库中遇到日期格式问题。我的问题是日期作为整数存储在这个数据库中的三个单独的列中(列日+列月+列年),我需要通过 Excel 中的 ODBC 连接到该数据库并根据所需日期过滤几行跨度(例如从 2019 年 12 月 1 日到 2019 年 12 月 31 日)。在这种情况下,我不想使用 PowerQuery 进行所有修改,因为完整的表有数百万行。我想在 SQL 字符串中指定过滤条件,这样 PowerQuery 就不必加载所有行...

我的方法如下:

我在 Excel 表中创建了 6 个参数单元格,我在其中简单地定义了日期从(例如单元格 1 = '01'、单元格 2 = '12' 和单元格 3 = '2019')和日期至(参数单元格 4 的逻辑相同, 5 和 6)。然后我在我定义的 SQL 字符串中提到了这些参数单元:

(日 >= 参数单元 1,月 >= 参数单元 2,年 >= 参数单元 3)和(日 <= 参数单元 4 等)

这对我来说效果很好,但只有当我喜欢在同一年内只导出几百行时。但是现在当我想导出 2019 年 12 月 1 日至 2020 年 1 月 31 日的数据时,我遇到了一个问题。在这种情况下,我的“逻辑”不起作用,因为 Month From 是“12”而 Month To 是“01”。

我尝试了另一种使用 concat SQL 函数创建文本列的方法,例如“2019-12-01”,然后将此列转换为日期时间格式(首先转换为 varchar8),但似乎这种方法对我不起作用,因为每次我收到一条错误消息:“未找到全局变量 DATETIME”。

在我向您发布我的一些代码之前,如果您能想出更好的解决方案或方法来解决我的问题,我可以请您提供建议吗?

非常感谢,祝你有美好的一天:-)

标签: sqlexcelibm-midrangepowerquerydb2-400

解决方案


一个简单的解决方案是

select * from table where year * 100 + month between 201912 and 202001

推荐阅读