1. ホーム
  2. sql

[解決済み] ORA-01810:書式コードが2回表示される

2022-02-17 09:23:55

質問

以下の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'
) 

解決方法は?

<ブロッククオート

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

2つの意味で間違っています。

1. 不正確なフォーマットコード

を繰り返していますね。 MM のフォーマットマスクを2回使用します。 MMMI .

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;
SELECT TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss')FROMデュアル
                                          *
1 行目で ERROR が発生しました。
ORA-01810: フォーマットコードが2回表示されました。

2. 不正確な時間部分

00:00:00 を投げることになるので、間違っています。 ORA-01849 というのは hourは0にはできないので、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;
SELECT TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mi:ss')FROMデュアル
                     *
1 行目で ERROR が発生しました。
ORA-01849: 時間は 1 から 12 の間でなければなりません。

正しい方法は 24時間 の書式を残すか、あるいは 時間部分 となり、デフォルトは 12 AM .

例えば

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