2017-12-14 5 views
0

値を通常の日付書式に変換しようとしています。しかし、私はエラーORA-01841を受信して​​います:(フル)年は-4713と+9999の間で、0でなくてはなりません。私はこのウェブサイトで同様の質問の答えを調べたが、それは私の問題には触れていない。正規表現の出力データからの日付変換 - ORA-01841:(フル)年は-4713から+9999の間で、0でない必要があります。

-- How the data looks like 
select REPLACE(REGEXP_SUBSTR(data_detail, '([^|]*)([$|]|$)', 1, 5), '|', '') from land.LAND_DATA; 

出力

2017-11-16T04:45:05.000Z

2017-11-16T04:46:04.000Z

私は上記の出力を変換しようとしています適切な日付形式に私はエラーを受信して​​います。どのような間違い私はここ

select 
TO_DATE(
TO_CHAR(
TO_TIMESTAMP(
    REPLACE(REGEXP_SUBSTR(data_detail, '([^|]*)([$|]|$)', 1, 5), '|', ''), 
'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"'),'MM/DD/YYYY HH24:MI:SS'), 
     'MM/DD/YYYY HH24:MI:SS') 
from land.LAND_DATA; 

答えて

0

をやっているこれらの結果は、TO_TIMESTAMP functionための入力データを、次のとおりです。

2017-11-16T04:45:05.000Z 
2017-11-16T04:46:04.000Z 

年が最初に来る、その後、月、日、および時間は、ミリ秒を持っている、以下の最後(コンマの後)。


これはあなたのコードからの抜粋です: - 月(01

  • MM

    TO_TIMESTAMP(....... , 'MM/DD/YYYY HH24:MI:SS') 
    

    2番目のパラメータはa date format modelあり、これらの文字は以下の意味(順序で)を持っています-12; January = 01)。

  • / - 月の日(1-31)
  • / - -
  • DDセパレーターセパレーター
  • YYYYから4桁の年。 Sは、BCの日付の前にマイナス記号を付けます。
  • - セパレータ(スペース)
  • HH24 - 時間(0-23)。
  • : - セパレータ
  • MI - 分(0-59)。
  • : - セパレータ
  • SS - 秒(0-59)。

月はこの形式で最初に来るが、あなたのデータは今年から始まるため、上記の書式モデルは、入力データの形式と一致していません!

代わりを次の形式を使用します。

'yyyy-mm-dd"T"hh24:mi:ss.ff"Z"' 

あなたはフォーマットが細かいですか、このような単純なクエリを使用してエラーを与えるかどうかをテストすることができます。

select 
    to_timestamp('2017-11-16T04:45:05.000Z', 'yyyy-mm-dd"T"hh24:mi:ss.ff"Z"') 
from dual; 

TO_TIMESTAMP('2017-11-16T04:4 
----------------------------- 
2017/11/16 04:45:05.000000000 
関連する問題