我在Oracle数据库的查询中面临一些奇怪的行为。 我只是联系数据库,因此我对其结构没有任何影响。
我的问题在于" entrydate",其定义为列yyyyMMddhhmmss
并包含格式为Select sum(col1 + col2 + col3) as summedcount
from traces
where ProductID = 123456 and entrydate > 20170911060000;
的日期(我们的供应商通常为
我遇到的是以下内容:
Select sum(col1 + col2 + col3) as summedcount
from traces
where ProductID = 123456 and entrydate > 20170111060000;
上述查询会得到正确答案,而
ORA-01722
导致ORA-1722
错误...
我改变的只是检查1月而不是9月......
我理解当您未提供干净的INT值时会发生SELECT * FROM traces WHERE REGEXP_LIKE(entrydate, '[^0-9]+')
,但在这种情况下,我从不这样做......
有人能让我对我在这里失踪的东西有所了解吗?
编辑: 作为一个额外的我运行{{1}}以确保我在该列中只有数值,这似乎是这种情况!
答案 0 :(得分:2)
如果col1
,col2
和col3
真的是numbers
,那么您就不会在那里遇到格式错误。
离开ProductId
。它是作为字符串存储的吗?如果是这样,你应该使用:
where ProductID = '123456' and . . .
优化器可能很有趣。引擎可能首先在日期过滤。因此,如果1月份的所有产品ID都是正确的,那么9月份可能就错了。
哦,第二个想法,问题也可能是日期 - 假设产品ID没问题。如果它没有存储为数字,那么您可能需要:
where ProductID = 123456 and entrydate > '20170111060000'
或:
where ProductID = 123456 and entrydate > TIMESTAMP '2017-01-11T06:00:00'
答案 1 :(得分:0)
确保您的col1,col2和col3也包含严格的数字,SUM
可能会引发此错误