从相当旧的 IBM 系列 AS400 DB2 查询数据(日期格式问题)
Querying data from quite old IBM iseries AS400 DB2 (date format issue)
我在从数据库中查询数据方面是个新手,现在我在非常旧的(我不知道确切的版本)IBM iSeries AS400 DB2 数据库中遇到日期格式问题。我的问题是日期存储在这个数据库中的三个单独的列中作为整数(列日+列月+列年)我需要通过 Excel 中的 ODBC 连接到这个数据库并过滤几行根据所需的日期跨度(例如,从 2019 年 12 月 1 日到 2019 年 12 月 31 日)。在这种情况下,我不想使用 PowerQuery 进行所有修改,因为完整的 table 有数百万行。我想在 SQL 字符串中指定过滤条件,这样 PowerQuery 就不必加载所有行...
我的方法如下:
我在 Excel sheet 中创建了 6 个参数单元格,我在其中简单地定义了 Date From(例如单元格 1 = '01',单元格 2 = '12' 和单元格 3 = '2019 ') 和截止日期(参数单元格 4、5 和 6 的逻辑相同)。然后我在我定义的 SQL 字符串中提到了这些参数单元格:
(日 >= 参数单元格 1,月 >= 参数单元格 2,年 >= 参数单元格 3)
和
(日期 <= 参数单元格 4 等)
这对我来说非常有用,但仅当我喜欢在同一年内仅导出几百行时。但是现在当我想导出 2019 年 12 月 1 日到 2020 年 1 月 31 日的数据时,我遇到了一个问题。在这种情况下,我的 "logic" 不起作用,因为 Month From 是 '12',Month To 是 '01 '.
我尝试了另一种使用 concat SQL 函数的方法来创建像“2019-12-01”这样的文本列,然后将此列转换为日期时间格式(首先转换为 varchar8),但似乎这种方法对我不起作用,因为每次我收到一条错误消息:"Global variable DATETIME not found".
在我post你之前我的一些代码,如果你能想到更好的解决方案或方法来解决我的问题,我可以请你提供建议吗?
非常感谢,祝你今天愉快:-)
一个简单的解决方案是
select * from table where year * 100 + month between 201912 and 202001
我在从数据库中查询数据方面是个新手,现在我在非常旧的(我不知道确切的版本)IBM iSeries AS400 DB2 数据库中遇到日期格式问题。我的问题是日期存储在这个数据库中的三个单独的列中作为整数(列日+列月+列年)我需要通过 Excel 中的 ODBC 连接到这个数据库并过滤几行根据所需的日期跨度(例如,从 2019 年 12 月 1 日到 2019 年 12 月 31 日)。在这种情况下,我不想使用 PowerQuery 进行所有修改,因为完整的 table 有数百万行。我想在 SQL 字符串中指定过滤条件,这样 PowerQuery 就不必加载所有行...
我的方法如下:
我在 Excel sheet 中创建了 6 个参数单元格,我在其中简单地定义了 Date From(例如单元格 1 = '01',单元格 2 = '12' 和单元格 3 = '2019 ') 和截止日期(参数单元格 4、5 和 6 的逻辑相同)。然后我在我定义的 SQL 字符串中提到了这些参数单元格:
(日 >= 参数单元格 1,月 >= 参数单元格 2,年 >= 参数单元格 3) 和 (日期 <= 参数单元格 4 等)
这对我来说非常有用,但仅当我喜欢在同一年内仅导出几百行时。但是现在当我想导出 2019 年 12 月 1 日到 2020 年 1 月 31 日的数据时,我遇到了一个问题。在这种情况下,我的 "logic" 不起作用,因为 Month From 是 '12',Month To 是 '01 '.
我尝试了另一种使用 concat SQL 函数的方法来创建像“2019-12-01”这样的文本列,然后将此列转换为日期时间格式(首先转换为 varchar8),但似乎这种方法对我不起作用,因为每次我收到一条错误消息:"Global variable DATETIME not found".
在我post你之前我的一些代码,如果你能想到更好的解决方案或方法来解决我的问题,我可以请你提供建议吗?
非常感谢,祝你今天愉快:-)
一个简单的解决方案是
select * from table where year * 100 + month between 201912 and 202001