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

Joh*_*iva 2 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
Run Code Online (Sandbox Code Playgroud)

日期和时间格式信息:

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

Ale*_*ole 6

您有两个问题:TO_DATE无法识别任何时区组件或小数秒,您必须将其转换为带有tome区域的时间戳; 并且.s不是你如何表示小数秒,无论如何,你需要.ff.有效的格式模型显示在文档中.

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

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

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

  • 甚至更好地完全匹配格式而不依赖于Oracle的猜测权.也就是说,格式模型应该遵循字符串文字的结构; 格式模型应该以`... ff + TZHTZM`结束(如果在文字参数中,+应该在模型中明确地存在,并且在模型中应该没有:THZ和TZM之间如果没有:它们之间在字面上).在这种情况下,甲骨文猜对了,但有时却没有. (2认同)