web-dev-qa-db-ja.com

ORA-01810:フォーマットコードが2回表示されます

以下のSQLがORA-01810エラーを生成するのはなぜですか?エラーを調査し、日付の挿入ごとに異なる日付形式を使用しています

INSERT INTO bag_grte_clm
(
    schd_dprt_ldt,
    arr_trpn_stn_cd,
    bkg_crtn_gdt,
    sbmt_bag_grte_clm_dt,
    bag_grte_clm_stt_cd,
    lst_updt_gts,
    bag_grte_clm_gts,
    dprt_trpn_stn_cd
)
VALUES (
    TO_DATE('2015/12/06', 'yyyy/mm/dd'),
    'YUL',
    TO_DATE('2015-11-15', 'yyyy-mm-dd'),
    TO_DATE('120615', 'MMDDYY'),
    'DENIAL',
    (current_timestamp),
    TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss'),
    'ATL'
) 
19
LedMan1001

TO_TIMESTAMP( '20151206 00:00:00'、 'yyyymmdd hh:mm:ss')

次の2つの点で間違っています。

1。不正な形式コード

MMフォーマットマスクを2回繰り返しました。 MMmonthであり、MIminutesです。

 SQL> SELECT TO_TIMESTAMP( '20151206 00:00:00'、 'yyyymmdd hh:mm:ss')FROM dual; 
 SELECT TO_TIMESTAMP( '20151206 00:00:00'、 'yyyymmdd hh:mm:ss ')FROM dual 
 * 
 ERROR 1:line:
 ORA-01810:形式コードが2回表示されます

2。誤った時間部分

00:00:00は、スローされるため間違っていますORA-01849時間はゼロにはできません。1〜12でなければなりません。

 SQL> SELECT TO_TIMESTAMP( '20151206 00:00:00'、 'yyyymmdd hh:mi:ss')FROM dual; 
 SELECT TO_TIMESTAMP( '20151206 00:00:00'、 'yyyymmdd hh:mi:ss ')FROM dual 
 * 
 1行目のエラー:
 ORA-01849:時間は1〜12 
の間でなければなりません

正しい方法は、24時間形式を使用するか、デフォルトの12 AMになるtime部分のままにすることです。

例えば、

24時間形式:

SQL> SELECT  TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh24:mi:ss') my_tmstamp FROM dual;

MY_TMSTAMP
---------------------------------------------------------------------------
06-DEC-15 12.00.00.000000000 AM

時間部分なし:

SQL> SELECT  TO_TIMESTAMP('20151206', 'yyyymmdd') my_tmstamp FROM dual;

MY_TMSTAMP
-----------------------------------------------------------------------
06-DEC-15 12.00.00.000000000 AM
43
Lalit Kumar B

TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss')mm形式コードを2回使用しました

MMmonth
MIは、minute
おそらくYYYYMMDD HH:MI:SS

詳細については、 日付形式モデル のリストを参照してください。

12
Mr. Llama