Db2 为什么我的sql查询中有日期错误?
我正在执行SQL SELECT查询,但出现错误消息: SQL错误[22007]:[SQL0181]日期、时间或时间戳的值 字符串不正确 这是我的要求: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
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子句中没有函数的情况下运行得更快