我正在执行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))给我正确的日期格式。
问题从哪里来?
谢谢
答案 0 :(得分:1)
确保STNDAV中存储的日期有效。我的意思是,请检查是否存在任何无效日期,例如2月30日或“ 99999999”。如果源是IBM i(iSeries或AS / 400),则避免使用WHERE部分中的功能会更快,因此STNDAV'20190101'和'20190104'之间的性能会更好。