sql - 从相当老的 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”。
在我向您发布我的一些代码之前,如果您能想出更好的解决方案或方法来解决我的问题,我可以请您提供建议吗?
非常感谢,祝你有美好的一天:-)
解决方案
一个简单的解决方案是
select * from table where year * 100 + month between 201912 and 202001
推荐阅读
- amazon-web-services - Cloudbreak 的优势和局限性
- excel - VBA 更新链接的 Excel 工作簿的文件路径
- discord.js - 拆分参数
- python-3.x - 使用 Ctypes 与 Fortran DLL 交互时访问冲突
- java - 使用 group-by java 8 lambda 流计算平均值
- android - Xamarin Android 上的方向更改保留内容
- android - 9 补丁图像不拉伸
- c# - 在 EF Core 中使用 IList、List、ICollection 处理 1 到 n 关系
- c# - 根据类型用默认值填充 T[]
- ansible - 我可以在剧本中导入或包含 pre_tasks 或 post_tasks 吗?