我试图将时间戳(“1985-02-07T00:00:00.000Z”)转换为日期,但我在几次不同的尝试中都未能成功。
以下是我尝试的查询:
select to_date('1985-02-07T00:00:00.000Z', 'YYYY-MM-DDTHH24:MI:SS.fffZ')
from dual;
非常感谢您的建议。
答案 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)
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;
答案 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