【问题标题】:convert string literal to a date将字符串文字转换为日期
【发布时间】:2015-10-02 09:21:06
【问题描述】:

我的数据库中有一个 varchar2 字段,格式例如 -

2015-08-19 00:00:01.0
2014-01-11 00:00:01.0
etc.

我正在尝试将其转换为 DD-MON-YYYY 格式的日期。例如,2015-08-19 00:00:01.0 应该变成 19-AUG-2015。我试过了

 select to_date(upgrade_date, 'YYYY-MM-DD HH24:MI:SS') from connection_report_update

但即使在这一点上,我在转换整个输入字符串之前得到 ORA-01830 日期格式结束。有什么想法吗?

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    您有最多毫秒的详细信息,为此,您必须使用 TO_TIMESTAMP() 格式模型 'FF'

    select to_timestamp('2015-08-19 00:00:01.0' ,'YYYY-MM-DD HH24:MI:SS.FF') as result from dual;
    
    RESULT
    ---------------------------------------------------------------------------
    19-AUG-15 12.00.01.000000000 AM
    

    而且 Date 本身没有格式,只有日期输出可以是格式。因此,当您希望它以不同的格式打印时,您需要再次使用转换后时间戳的TO_CHAR()

    select to_char(to_timestamp('2015-08-19 00:00:01.0' ,'YYYY-MM-DD HH24:MI:SS.FF'),'DD-MON-YYYY') as result from dual;
    
    RESULT
    -----------
    19-AUG-2015
    

    【讨论】:

      【解决方案2】:

      为什么要将日期时间存储在字符串中???

      无论如何。要从 '2015-08-19 00:00:01.0' 获取以毫秒为单位的日期时间(在 Oracle 中是 TIMESTAMP),请使用 to_timestamp

      to_timestamp('2015-08-19 00:00:01.0', 'yyyy-mm-dd hh24:mi:ss.ff')
      

      然后要获得所需的输出格式,请使用to_char:

      to_char(thedate, 'DD-MON-YYYY')
      

      一起:

      to_char(to_timestamp('2015-08-19 00:00:01.0', 'yyyy-mm-dd hh24:mi:ss.ff'), 'DD-MON-YYYY')
      

      【讨论】:

      • 哎呀,有点晚了 :-) 我看到 Maheswaran Ravisankar 已经在他的回答中解释了所有这些。
      • 谢谢。我从其他人那里继承了数据库。否则我不会为日期字段存储字符串。
      【解决方案3】:

      您应该在 to_date 调用中指定您想要的格式,而不是当前格式:

      select to_date(upgrade_date, 'DD-MM-YYYY') from connection_report_update
      

      【讨论】:

        猜你喜欢
        • 2015-04-27
        • 2011-11-28
        • 1970-01-01
        • 2016-05-03
        相关资源
        最近更新 更多