【问题标题】:Comparison between Timestamp and date giving error ora-01852时间戳和日期之间的比较给出错误 ora-01852
【发布时间】:2014-08-20 16:26:34
【问题描述】:

有一个表的日期列类型为 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 Seconds must be between 0 and 59. (这是因为有些记录有 second=59 和 fraction=一些非零值)

有什么办法可以解决这个问题?

【问题讨论】:

    标签: sql oracle date timestamp


    【解决方案1】:

    时间戳转换好像没问题:

    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 采用格式 19-DEC-2014 6:00:00 或 19-12-14 06:00:00 或 19.12.14 06:00:00 我尝试了建议的方法,但这也没有成功.. :(
    • 好的,也许时间戳转换对于您在问题中输入的字符串是正确的,但可能您表中的某些记录的时间戳字符串格式不正确。
    • 嘿!谢谢!!找到了原因。整个格式都不一样... VARCHAR2 数据类型导致了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    相关资源
    最近更新 更多