我试图将一个时间戳("1985-02-07T00:00:00.000Z")转换为日期,但在多次尝试中都没有成功。
以下是我尝试过的查询:
select to_date('1985-02-07T00:00:00.000Z', 'YYYY-MM-DDTHH24:MI:SS.fffZ')
from dual;
非常感谢您的建议。
我试图将一个时间戳("1985-02-07T00:00:00.000Z")转换为日期,但在多次尝试中都没有成功。
以下是我尝试过的查询:
select to_date('1985-02-07T00:00:00.000Z', 'YYYY-MM-DDTHH24:MI:SS.fffZ')
from dual;
非常感谢您的建议。
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;
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.
遵循一些规则:
MM
表示月份,"MM"
表示双 M。FF
,而不是 F
或 FFF
。您可以使用带有整数后缀的数字指定位数,例如 FF3
。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;
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'
如果您想以日期时间格式获取字符串,请尝试以下方法...
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