2009-05-05 16 views
3

私は以前に素晴らしい助けをしてくれました。Oracle日付の書式設定 "2009-02-13T11:46:40 + 00:00"

私は、この形式のWebサービスから入ってくる日を持っている: 2009-02-13T11:46:40 + 00:00を

私には、標準のUTC形式のように見えました。

私はOracleデータベースに挿入する必要があるため、挿入時にto_date()を使用しています。問題は、私はそれに一致するフォーマット文字列を取得し、 "ORA-01861:リテラルはフォーマット文字列と一致しません"というエラーが発生し続けることです。

私はそれほど些細な問題は知っていますが、何らかの理由で正しいフォーマット文字列を受け入れることができません。どんな助けもありがたい。

感謝:)

ガレス

+0

あなたはどのマスクをTO_DATE()に供給していますか? – cagcowboy

答えて

4
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 
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 

(私はAM/PMインジケータが存在しないため、入力文字列が24時間制を使用していると仮定しています。)

あなたは、単純なDATEにそれを変換したい場合は、次のことができ、タイムゾーン情報は失われます。

+0

デイブ、これは華麗な歓声です - 私はTIMESTAMP_WITH_TIME_ZONEデータ型を使用することはできませんが、私のデータベースではありません。しかし、それが望ましい解決策になります。 乾杯 – Gareth

1

指定した形式で日付をインポートするには、nls_date_formatを設定します。

例:あなたのSQL文を短くすることができる

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

この方法で(なしキャスト)。さまざまなマスクの見方Datetime Format Models

関連する問題