Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ORA-01810: format code appears twice

Why is the sql below generating an ORA-01810 error? I researched the error and I am using different date formats for each date insert

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' )  
like image 853
LedMan1001 Avatar asked Dec 10 '15 23:12

LedMan1001


People also ask

How do I resolve ORA 01830?

This error can occur when you try to enter a date value without using the TO_DATE function. In Oracle, the default date format is generally DD-MON-YYYY. If you try to enter a date value that does not comply with this format, you need to use the TO_DATE function.

What is the date format in Oracle?

Oracle stores dates in an internal numeric format representing the century, year, month, day, hours, minutes, seconds. The default date format is DD-MON-YY.


1 Answers

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

It is wrong in two ways:

1. Incorrect format code

You have repeated the MM format mask twice. MM is month and MI is 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 at line 1: ORA-01810: format code appears twice 

2. Incorrect time portion

00:00:00 is wrong as it would throw ORA-01849 since the hour cannot be zero, it must be between 1 and 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 

The correct way is to either use 24 hour format, or leave the time portion which would default to 12 AM.

For example,

24 hour format:

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 

No time portion:

SQL> SELECT  TO_TIMESTAMP('20151206', 'yyyymmdd') my_tmstamp FROM dual;  MY_TMSTAMP ----------------------------------------------------------------------- 06-DEC-15 12.00.00.000000000 AM 
like image 147
Lalit Kumar B Avatar answered Sep 22 '22 02:09

Lalit Kumar B