2015-12-10 6 views
6

Почему sql ниже генерирует ошибку ORA-01810? Я исследовал ошибку, и я использую различные форматы даты для каждой даты вставки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' 
) 

ответ

20

TO_TIMESTAMP ('20151206 00:00:00', 'ггггммдд чч: мм: сс')

Это неправильно двумя способами:

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

Вы дважды повторяли маску формата MM. 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 
              * 
ERROR at line 1: 
ORA-01810: format code appears twice 

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

Спасибо за ваш ответ. Я очень ценю это - sql работает сейчас! – LedMan1001

+1

@ LedMan1001 Пожалуйста, отметьте это как ответ, помогли бы и другим! –

+1

Готово - еще раз спасибо :) – LedMan1001

8

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

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

Для получения дополнительной информации см. Список date format models.

+0

'TO_TIMESTAMP ('20151206 00:00:00',«ггггммдд hh: mi: ss ') 'все еще не так. Он будет бросать ** ORA-01849: час должен быть между 1 и 12 **. –

+0

Спасибо за ваш ответ. Я очень ценю это - sql работает сейчас! – LedMan1001

+0

@ LedMan1001 - Если этот ответ помог решить вашу проблему, пожалуйста, рассмотрите [обозначение его как принятого] (https://stackoverflow.com/help/someone-answers), используя галочку под стрелками для голосования. Спасибо! –