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

问题描述:

我试图将时间戳(“1985-02-07T00:00:00.000Z”)转换为日期,但我未能成功完成多次尝试。如何将“1985-02-07T00:00:00.000Z”(ISO8601)转换为Oracle中的日期值?

下面是我曾尝试查询:

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

您的建议将不胜感激。

+2

+1尝试的东西。你可以通过包括结果是什么以及它们是错误的还是通常不起作用来更好地解决问题。 (是否有错误?日期是几个小时?) – 2011-12-28 09:57:12

+2

根据[to_date](http://www.techonthenet.com/oracle/functions/to_date.php)我相信至少“fff”是错的应该是“FF3”。但我不使用/有Oracle :) – 2011-12-28 10:01:52

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

pst有关ff3修饰符的注释也是正确的。

“恒” 中的格式掩码值需要用双引号

所以最后的说法是:

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

一些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; 

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. 

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' 
+0

很好用_tz函数。我不得不用这个:'YYYY-MM-DD“T”HH24:MI:SS.FF3TZHTZM' – JoshC13 2015-07-09 17:12:00

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

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