Db2 为什么我的sql查询中有日期错误?

Db2 为什么我的sql查询中有日期错误?,db2,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

我正在执行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字段创建的日期,因为如果我用例如日期“2019-01-03”替换,它会起作用。 日期左STNDAV,4 | |'-'| |子STNDAV,5,2 | |'-'| |右STNDAV,2给出了正确的日期格式

问题从何而来


谢谢,

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

假设STNDAV是包含YYYYMMDD值的CHAR/VARCHAR数据类型,如果至少有一行中的数据无效,且包含不符合YYYYMMDD的字符,则会出现此症状。此外,如果STNDAV超过8个字符,则右侧STNDAV,2可能不会返回您期望的结果,请比较substrSTNDAV,7,2。非常感谢您的回答,我理解了我的要求,这不是我所说的两个日期之间不显示其他日期的意思?实际上,几乎每个数据库在where子句或join子句中没有函数的情况下运行得更快