我有一个存储过程,我想格式化其中的时间字段:    SELECT to_date(A.RECORDTIME,'yyyy-mm-dd') as RECORDTIME    FROM HISTORYSTATE A
执行后报:“文字与格式字符串不匹配”的错,请高手们指点如何解决,谢谢。在线等

解决方案 »

  1.   

    RECORDTIME是什么数据类型?如果是DATE型的话,用to_char好了
    SELECT to_char(A.RECORDTIME,'yyyy-mm-dd') as RECORDTIME FROM HISTORYSTATE A;
      

  2.   

    如果用char的话我选择出来的表就不能进行时间上的比较了。
      

  3.   

    就是你的类型转换格式不匹配。比如你的
    RECORDTIME是2008-12-13 6:15就不可以按那个格式转换。
    还有你RECORDTIME这个是date型的还是字符型的。date型的要to_char
      

  4.   

    没有其他办法了吗?如果to_char后我之后的操作就不好做了,有什么可以解决后面得到的Table中的RECORDTIME列的类型吗?我需要用此字段进行与当前时间的比较。
      

  5.   

    to_char之后,再to_date就可以了。
    to_date(to_char(dateCol,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')
      

  6.   

    关键你这个是字符型的还是date型的。如果是字符型的需要格式符合
    如果你的存储格式是这样的2008-10-23 6:15
    那用substr 函数截取前面十位substr(RECORDTIME,1,10);再转换。跟当前时间对比的话也可以用字符串转换
    substr(RECORDTIME,1,10)=to_date(sysdate,'yyyy-mm-dd')
      

  7.   

    格式化其中的时间字段
    =========================
    如果想以一定的格式数据日期类型的字段,用该用 to_char 而不是 to_date。date 类型的存储格式是一定的。我需要用此字段进行与当前时间的比较。
    =================================
    如果此字段也是 date 类型的,无需转换。
      

  8.   

    to_char(date类型,'yyyy-mm-dd hh24:mi:ss')
      

  9.   

    to_char(date类型,'yyyy-mm-dd hh24:mi:ss')
      

  10.   

    SYSDATE - RECORDTIME 就是已天为计量单位的Number类型呀,带小数;我用 Select Round(SYSDATE- InitiateDate)获取天数
      

  11.   

    RECORDTIME 字段可能有脏数据。
    建议这样:select to_date(case when length(to_char(a.RECORDTIME))<8 then '20081023' ELSE to_char(a.RECORDTIME) END,'YYYY-MM-DD')
    FROM HISTORYSTATE A
    ;