ora-01722奇怪的行为

时间:2017-09-11 18:24:04

标签: sql oracle

我在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}}以确保我在该列中只有数值,这似乎是这种情况!

2 个答案:

答案 0 :(得分:2)

如果col1col2col3真的是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可能会引发此错误