ORA-01821:ISO 8601日期与当地时间的日期格式无法识别错误

时间:2016-08-26 10:58:07

标签: sql oracle date

我正在尝试根据Java代码中的参数值转换SQL中的日期。但是,当执行以下查询时,我收到错误。请求您帮我修复此查询。

 SELECT TO_DATE ('2015-08-26T05:46:30.488+0100',
 'YYYY-MM-DD"T"hh24:mi:ss.sTZH:TZM')
  FROM DUAL
  *
Error at line 2
ORA-01821: date format not recognized

日期和时间格式信息:

http://www.w3.org/TR/NOTE-datetime

2 个答案:

答案 0 :(得分:6)

您有两个问题:TO_DATE无法识别任何时区组件或小数秒,您必须将其转换为带有tome区域的时间戳;并且.s无论如何表示小数秒,您需要.ff。有效格式模型are shown in the documentation

将这些放在一起你可以做到:

SELECT TO_TIMESTAMP_TZ ('2015-08-26T05:46:30.488+0100',
 'YYYY-MM-DD"T"hh24:mi:ss.ffTZHTZM')
FROM DUAL;

TO_TIMESTAMP_TZ('2015-08-26T05:46:30.488+0100','YYYY-MM-DD"T"HH24:MI:SS.FFTZHTZ
-------------------------------------------------------------------------------
26-AUG-15 05.46.30.488000000 +01:00                                             

如果你真的希望它作为一个日期,你需要决定如何处理时区信息 - 要么假设它的本地时间(基本上忽略它),要么转换为UTC,或其他一些时区。您可能真的希望将其保留为带时区的时间戳。

答案 1 :(得分:0)

嗯,错误信息非常具体。 Oracle无法识别给定的日期格式YYYY-MM-DD"T"hh24:mi:ss.sTZH:TZM

您可以参考此页面以构建正确的日期格式:https://www.techonthenet.com/oracle/functions/to_date.php