为什么我的SQL查询中出现日期错误?

时间:2019-05-07 09:10:42

标签: db2

我正在执行SQL SELECT查询,但出现错误消息:

  

“ SQL错误[22007]:[SQL0181]日期,时间或时间戳记的值   字符串不正确。“

这是我的要求:

 SELECT * 
 FROM ROXDTA400.STKF0300 A 
 JOIN ROXDTA400.TABJ00141 B ON A.STNSIT = B.CDSITE 
 WHERE ( A.STNLIB <> '-- Trémie --' 
         AND A.STNSIT <> 40 
         AND DATE(LEFT(STNDAV,4) || '-' || substr(STNDAV,5,2) || '-' || RIGHT(STNDAV,2)) 
         BETWEEN  DATE('2019-01-01') AND DATE('2019-01-04')  );

问题似乎出在使用STNDAV字段创建的日期,因为如果我替换为例如DATE('2019-01-03'),它就可以工作。 日期(左(STNDAV,4)||'-'|| substr(STNDAV,5,2)||'-'||右(STNDAV,2))给我正确的日期格式。

问题从哪里来?

谢谢

1 个答案:

答案 0 :(得分:1)

确保STNDAV中存储的日期有效。我的意思是,请检查是否存在任何无效日期,例如2月30日或“ 99999999”。如果源是IBM i(iSeries或AS / 400),则避免使用WHERE部分中的功能会更快,因此STNDAV'20190101'和'20190104'之间的性能会更好。