没有触发时间戳的db2查询

时间:2018-04-06 15:25:03

标签: db2

我试图在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;

1 个答案:

答案 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;从日期转换为整数