Oracle日期格式“2009-02-13T11:46:40 + 00:00”

时间:2009-05-05 14:29:18

标签: oracle date formatting

我以前有过一些很棒的帮助,我希望你能再次让我离开一个洞。

我有一个以这种格式从Web服务进入的日期: 2009-02-13T11:46:40 + 00:00

对我来说看起来像标准的UTC格式。

我需要将它插入到Oracle数据库中,所以我在插入时使用to_date()。问题是,我无法获得匹配的格式化字符串,并且不断收到“ORA-01861:文字与格式字符串不匹配”错误。

我知道它是一个相当微不足道的问题,但由于某种原因我不能让它接受正确的格式字符串。任何帮助表示赞赏。

谢谢:)

加雷

3 个答案:

答案 0 :(得分:7)

您可以直接将其转换为TIMESTAMP_WITH_TIME_ZONE数据类型。

select
  to_timestamp_tz('2009-02-13T11:46:40+00:00','YYYY-MM-DD"T"HH24:MI:SSTZH:TZM')
from
 dual

TO_TIMESTAMP_TZ('2009-02-13T11:46:40+00:00','YYYY-MM-DD"T"HH24:MI:SSTZH:TZM
---------------------------------------------------------------------------
13-FEB-09 11.46.40.000000000 AM +00:00

(我假设输入字符串使用24小时制,因为没有AM / PM指示符。)

如果您想将其转换为简单的日期,则可以,但会丢失时区信息。

答案 1 :(得分:5)

SELECT  CAST(TO_TIMESTAMP_TZ(REPLACE('2009-02-13T11:46:40+00:00', 'T', ''), 'YYYY-MM-DD HH:MI:SS TZH:TZM') AS DATE)
FROM    dual

答案 2 :(得分:1)

要以指定格式导入日期,您可以设置nls_date_format

示例:

alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'

这样你的SQL语句可以更短(没有强制转换)。对于各种面具,请查看Datetime Format Models