2015-12-10 18 views
6

Tại sao sql bên dưới tạo ra lỗi ORA-01810? Tôi nghiên cứu các lỗi và tôi đang sử dụng định dạng ngày khác nhau cho mỗi ngày chènORA-01810: mã định dạng xuất hiện hai lần

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' 
) 

Trả lời

20

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

Đó là sai theo hai cách:

1. Mã định dạng không đúng

Bạn đã lặp lại mặt nạ định dạng MM hai lần. MMthángMIphút.

 
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. phần thời gian không đúng

00:00:00 là sai vì nó sẽ ném ORA-01.849 kể từ khi giờ không thể được không, nó phải có từ 1 đến 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 

Cách đúng là để thể sử dụng 24 giờ định dạng, hoặc rời khỏi phần thời gian đó sẽ mặc định 12 AM.

Ví dụ,

24 định dạng giờ:

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 

Không có thời gian phần:

SQL> SELECT TO_TIMESTAMP('20151206', 'yyyymmdd') my_tmstamp FROM dual; 

MY_TMSTAMP 
----------------------------------------------------------------------- 
06-DEC-15 12.00.00.000000000 AM 
+0

Cảm ơn câu trả lời của bạn Tôi thực sự đánh giá cao nó - sql hiện đang hoạt động! – LedMan1001

+1

@ LedMan1001 Hãy đánh dấu nó là đã trả lời, cũng sẽ giúp người khác! –

+1

Xong - cảm ơn bạn lần nữa :) – LedMan1001

8

Bạn đã sử dụng mã định dạng mm hai lần trong TO_TIMESTAMP('20151206 00:00:00', 'yyyymmdd hh:mm:ss')

MM là dành cho tháng
MI là dành cho phút
Bạn có thể muốn sử dụng YYYYMMDD HH:MI:SS.

Vui lòng xem danh sách date format models để biết thêm thông tin.

+0

'TO_TIMESTAMP ('20.151.206 00:00:00', 'yyyymmdd hh: mi: ss ') 'vẫn sai. Nó sẽ ném ** ORA-01849: giờ phải nằm trong khoảng từ 1 đến 12 **. –

+0

Cảm ơn câu trả lời của bạn Tôi thực sự đánh giá cao nó - sql hiện đang hoạt động! – LedMan1001

+0

@ LedMan1001 - Nếu câu trả lời này giúp giải quyết vấn đề của bạn, vui lòng xem xét [đánh dấu nó là được chấp nhận] (https://stackoverflow.com/help/someone-answers) bằng cách sử dụng dấu kiểm dưới mũi tên bỏ phiếu. Cảm ơn bạn! –

Các vấn đề liên quan