我以前有过一些很棒的帮助,我希望你能再次让我离开一个洞。
我有一个以这种格式从Web服务进入的日期: 2009-02-13T11:46:40 + 00:00
对我来说看起来像标准的UTC格式。
我需要将它插入到Oracle数据库中,所以我在插入时使用to_date()。问题是,我无法获得匹配的格式化字符串,并且不断收到“ORA-01861:文字与格式字符串不匹配”错误。
我知道它是一个相当微不足道的问题,但由于某种原因我不能让它接受正确的格式字符串。任何帮助表示赞赏。
谢谢:)
加雷
答案 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