我是从数据库查询数据的新手,现在我在使用非常旧的IBM iSeries AS400 DB2数据库的日期格式时遇到问题。我的问题是日期存储在该数据库中的三个独立列中为整数(列日+列月+列年),我需要通过ODBC在Excel中连接到该数据库,并根据所需日期仅过滤几行跨度(例如从2019年12月1日至2019年12月31日)。在这种情况下,我不想使用PowerQuery进行所有修改,因为整个表具有数百万行。我想在SQL字符串中指定过滤条件,因此PowerQuery不必加载所有行...
我的做法是:
我已经在Excel工作表中创建了6个参数单元格,我在其中简单定义了Date From(例如,单元格1 ='01',单元格2 ='12'和单元格3 ='2019')和Date To(参数单元格的逻辑相同) 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