我试图在DB2中运行查询,但是它给了我一个错误,即日期,时间或时间戳字符串中的值无效。
基本上,我试图提取当前日期在日期列+ 7天和日期列+ 127天之间的所有记录。或者更简单的方法可能是说日期列在current_date - 127天之内。我不确定它为什么失败,因为它似乎是正确的语法
select
framec,
covr1c,
colr1c,
sum(orqtyc) as TotalQTY
from table
where date(substr(extd2d,1,4)||'-'||substr(EXTD2d,5,2)||'-'||substr(EXTD2d,7,2)) + 7 DAY <= CURRENT_DATE
AND date(substr(extd2d,1,4)||'-'||substr(EXTD2d,5,2)||'-'||substr(EXTD2d,7,2)) + 127 DAY >= CURRENT_DATE
group by framec,covr1c,colr1c;
答案 0 :(得分:1)
因为extd2d
不是实际的日期数据类型。
所以你可以有空格,或者&#39; 20180219&#39;在那里......
就个人而言,我改变了表格以使用日期数据类型。但这通常不是快速或容易的。
在这种情况下,我为转换创建一个UDF,如果数据无效,则返回NULL。或者从here
下载Alan Campin的iDate然后,您可以使用UDF查找包含错误数据的行。
转换文字值而不是表格中的数据也更好。这样就可以使用extd2d
上的任何索引......
select
framec,
covr1c,
colr1c,
sum(orqtyc) as TotalQTY
from table
where extd2d between char(ConvertToIDate(Current_date - 7 DAYS))
AND char(ConvertToIDate(Current_date - 127 DAYS))
group by framec,covr1c,colr1c;
ConvertToIDate()
是Alan的iDate包中包含的UDF
iDate()
=&gt;从Char / Num日期转换为日期
ConvertToIDate()
=&gt;从日期转换为整数