ORA-01810: код формата появляется дважды

почему 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'
) 

2 ответов


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

это неправильно в двух отношениях:

1. Неверный формат кода

вы повторили MM маска формат в два раза. MM is месяц и MI is минут.

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 at line 1:
ORA-01810: format code appears twice

2. Неверная временная часть

00:00:00 неправильно, как бы это бросить Ора-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
                     *
ERROR at line 1:
ORA-01849: hour must be between 1 and 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

вы использовали mm формат кода дважды в TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss')

MM на месяц
MI на минуту
Вы, вероятно, хотели использовать YYYYMMDD HH:MI:SS.

пожалуйста, смотрите список дата в формате модели для получения дополнительной информации.