Oracle 在看似有效的格式上给出 ORA-01821

Oracle giving ORA-01821 on a format that appears to be valid

通话中

SELECT TO_DATE('Mon Sep 22 18:02:41 CDT 2014', 'DY MON DD HH24:MI:SS TZD YYYY') FROM Dual;

我明白了

ORA-01821: date format not recognized
01821. 00000 -  "date format not recognized"

我将 these Oracle instructions 中的格式字符串放在一起。 "TZR" 和 "TZD" 我都试过了,都不行。

DY  Abbreviated name of day.
MON Abbreviated name of month.
DD  Day of month (1-31).
HH24    Hour of day (0-23).
MI  Minute (0-59).
SS  Second (0-59).
TZD Daylight savings information. For example, 'PST'
TZR Time zone region.
YYYY    4-digit year

为什么这不起作用?

TO_DATE 不支持时区。

我认为您需要使用 to_timestamp_TZ() 来完成您想要的...

SELECT To_TimeStamp_TZ('Mon Sep 22 18:02:41 2014 CDT', 'DY MON DD HH24:MI:SS YYYY TZD') 
FROM Dual;

给你类似的东西(用我的 NLS 参数)

22-SEP-14 06.02.41.000000000 PM AMERICA/CHICAGO

还要注意数据类型必须是TIMESTAMP WITH TIME ZONE数据类型;或者 oracle 只是删除时区信息 w/o 错误。

https://docs.oracle.com/cd/E11882_01/server.112/e10729/ch4datetime.htm#NLSPG238