1. ホーム
  2. sql

[解決済み] ORA-01810:フォーマットコードが2回表示されます。

2022-03-08 05:38:17

質問

以下の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回使用します。 MM でございます MI でございます 議事録 .

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