【问题标题】:How to convert "1985-02-07T00:00:00.000Z" (ISO8601) to a date value in Oracle?如何将“1985-02-07T00:00:00.000Z”(ISO8601)转换为 Oracle 中的日期值?
【发布时间】:2012-01-29 01:41:37
【问题描述】:

我尝试将时间戳 ("1985-02-07T00:00:00.000Z") 转换为日期,但我多次尝试均未成功。

以下是我尝试过的查询:

 select to_date('1985-02-07T00:00:00.000Z', 'YYYY-MM-DDTHH24:MI:SS.fffZ')
 from dual;

非常感谢您的建议。

【问题讨论】:

  • +1 用于尝试。您可以通过包括结果是什么以及它们如何错误或通常不起作用来使问题变得更好。 (有错误吗?日期是不是延迟了几个小时?)
  • 根据to_date我认为至少“fff”是错误的,应该是“FF3”。但我不使用/没有 Oracle :)

标签: oracle date timestamp


【解决方案1】:

to_date 将输入转换为不支持小数秒的DATE 类型。要使用小数秒,您需要使用在使用 to_timestamp 时创建的 TIMESTAMP 类型

pst 关于ff3 修饰符的评论也是正确的。

格式掩码中的“常量”值需要用双引号括起来

所以最后的陈述是:

select to_timestamp('1985-02-07T00:00:00.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"')
from dual;

【讨论】:

    【解决方案2】:
    SQL> select cast(to_timestamp('1985-02-07T00:00:00.000Z', 'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') as date)
      2    from dual
      3  /
    
    CAST(TO_TIMESTAMP('
    -------------------
    07-02-1985 00:00:00
    
    1 row selected.
    

    【讨论】:

      【解决方案3】:
      SELECT to_timestamp_tz('2012-08-08T09:06:14.000-07:00','YYYY-MM-DD"T"HH24:MI:SS.FF3TZR')
      FROM dual;
      
      External table DDL,
      extract_date char(29) DATE_FORMAT timestamp WITH TIMEZONE mask 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZR'
      

      【讨论】:

      • 很好地使用了 _tz 函数。我不得不使用这个:'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM'
      【解决方案4】:

      一些rules to follow:

      1. 文字必须用双引号引起来:MM 需要一个月份数字,"MM" 需要一个双 M。
      2. 小数秒的格式是FF,而不是FFFF。您使用尾随整数指定位数,例如FF3
      3. 但日期无论如何都不能包含小数秒,因此您不能在这种情况下使用 FF3

      这行得通:

      SELECT TO_DATE('1985-02-07T00:00:00', 'YYYY-MM-DD"T"HH24:MI:SS')
      FROM dual;
      

      我不知道是否有办法忽略TO_DATE() 中的小数秒,所以我使用了字符串操作函数将它们去掉:

      SELECT TO_DATE(SUBSTR('1985-02-07T00:00:00.000Z', 1, 19), 'YYYY-MM-DD"T"HH24:MI:SS')
      FROM dual;
      

      【讨论】:

        【解决方案5】:

        如果你想获取日期时间格式的字符串,那么试试这个......

        select to_char(TO_DATE('2012-06-26T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"'),'yyyy-MM-dd hh:mm:ss PM') as EVENT_DATE from dual
        
        EVENT_DATE
        -----------------------
        2012-06-26 12:06:00 AM
        

        仅用于日期,只需使用...

        select TO_DATE('2012-01-06T00:00:00.809Z', 'YYYY-MM-DD"T"HH24:MI:SS".""ZZZZ"') from dual
        

        【讨论】:

          猜你喜欢
          • 2015-01-10
          • 2017-05-28
          • 2019-09-27
          • 1970-01-01
          • 2020-11-19
          • 1970-01-01
          • 2020-05-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多