有一个表具有varchar2类型的日期列。此字段中的值格式为:2013-12-19T12:12:23.345000000Z 我必须找到两个连续日期之间的区别。但由于日期是字符串格式,我首先将其转换为时间戳。我使用以下查询。
select dccontextid,
to_timestamp(substr(cdate,1,10)||' '||substr(cdate,12,12),'yyyy-mm-dd hh24:mi:ss.ff')
from cam6eng.ttestcolorproc_wd
where to_timestamp(substr(cdate,1,10)||' '||substr(cdate,12,12),'yyyy-mm-dd hh24:mi:ss.ff') between :StartDate and :EndDate
如果在不包含where子句的情况下运行上述查询,则会显示正确的时间戳值。但是当我把where子句放入时,它会给出错误ORA-01852秒必须在0到59之间。 (这是因为某些记录的第二个= 59且分数=某个非零值)
这个问题的解决方法是什么?
答案 0 :(得分:0)
时间戳转换似乎没问题:
select to_timestamp(substr('2013-12-19T12:12:23.345000000Z', 1, 10) || ' ' ||
substr('2013-12-19T12:12:23.345000000Z', 12, 12)
,'yyyy-mm-dd hh24:mi:ss.ff')
from dual
问题可能在于您正在比较时间戳的值。 :Startdate和:Enddate。你为这些人投入了什么样的价值观?