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

Abi*_*ash 30 oracle timestamp date

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

以下是我试过的查询:

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

非常感谢您的建议.

a_h*_*ame 49

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;
Run Code Online (Sandbox Code Playgroud)


Rob*_*ijk 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.
Run Code Online (Sandbox Code Playgroud)


Álv*_*lez 5

需要遵循的一些规则

  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;
Run Code Online (Sandbox Code Playgroud)

我不知道是否有办法忽略秒的小数部分,TO_DATE()因此我使用字符串操作函数将它们删除:

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


小智 5

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'
Run Code Online (Sandbox Code Playgroud)