表中有字段 a_time varchar(40)  ,如何将a_time转成短日期格式(yyyy-mm-dd)?例如:2011-5-10 10:30:23   ---转成:2011-5-10 使用 to_date(a_time,'yyyy-mm-dd') 和 to_char(a_time,'yyyy-mm-dd')都报错;求解ing~~~~~

解决方案 »

  1.   

    to_char(to_date(a_time,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd') 
      

  2.   


    SQL> select to_char(to_date('2011-5-10 10:30:23','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd') from dual;TO_CHAR(TO_DATE('2011-5-1010:3'
    ------------------------------
    2011-05-10
      

  3.   

    to_date(a_time,'yyyy-mm-dd')应该不会报错的
    除非你后台数据有错,请检查数据。
      

  4.   


    报错是因为a_time格式和你的'yyyy-mm-dd'不匹配。 即你的a_time 是长时间格式,
      那就对应‘yyyy-mm-dd hh24:mi:ss’,如果是短时间格式,就是‘yyyy-mm-dd’
      

  5.   

    楼上说的正确。
    还有to_char肯定报错了,因为a_time不是日期类型
      

  6.   

    a_time 是varchar型,库里存储的是长日期格式2011-5-10 10:30:23,现在的问题是怎么样才能把它转成短日期格式:2011-5-10
      

  7.   

    嗯,一开始数据库中的a_time字段是varchar类型的,所以需要先转换为日期格式(to_date),然后再转换to_char吧。
    不知道可以用字符串截取做么?
      

  8.   

    如果格式是固定——日期和时间中间是一个确定的空格,那么用字符串截取也可以啊SELECT   SUBSTR (REPLACE ('2011-5-11 9:14:00', ' ', '/'),
                     0,
                     INSTR (REPLACE ('2011-5-11 9:14:00', ' ', '/'), '/') - 1)
                AS datetime
      FROM   DUAL