如何将“1985-02-07T00:00:00.000Z”(ISO8601)转换为Oracle中的日期值?

时间:2011-12-28 09:53:04

标签: oracle date timestamp

我试图将时间戳(“1985-02-07T00:00:00.000Z”)转换为日期,但我在几次不同的尝试中都未能成功。

以下是我尝试的查询:

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

非常感谢您的建议。

5 个答案:

答案 0 :(得分:45)

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

时创建的to_timestamp类型

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

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

所以最后的陈述是:

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

答案 1 :(得分:10)

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.

答案 2 :(得分: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'

答案 3 :(得分:2)

一些rules to follow

  1. 文字必须加双引号:MM需要一个月号,"MM"需要一个双M。
  2. 小数秒的格式为FF,而不是FFFF。您可以使用尾随整数指定位数,例如FF3
  3. 但是日期无法保持小数秒,因此您无法在此上下文中使用FF3
  4. 这有效:

    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;
    

答案 4 :(得分:0)

如果您想以日期时间格式获取字符串,请尝试此....

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