以下の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
はmonthであり、MI
はminutesです。
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
TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss')
でmm
形式コードを2回使用しました
MM
はmonthMI
は、minute
おそらくYYYYMMDD HH:MI:SS
。
詳細については、 日付形式モデル のリストを参照してください。