2012-10-21 35 views
7

Tôi có một bảng trong sql như sau:SQL "không phải là một tháng hợp lệ"

CREATE TABLE Reserves(
    sid INTEGER, 
    bid INTEGER, 
    day DATE, 
    PRIMARY KEY (sid, bid, day), 
    FOREIGN KEY (sid) REFERENCES Sailors, 
    FOREIGN KEY (bid) REFERENCES Boats 
); 

và tôi đang cố gắng để chèn vào nó:

INSERT INTO Reserves VALUES(22, 101, '01-01-1998'); 

Nhưng tôi nhận được lỗi: ORA -01843: không phải tháng hợp lệ

Đây là db của Oracle. Tôi không chắc chắn có gì sai với định dạng ngày của tôi.

+3

Theo nguyên tắc chung, bạn nên luôn luôn sử dụng một định dạng ngày văn hóa inspecific (yyyyMMdd) trừ khi bạn đang khai báo định dạng ngày explcitly. '02-01-2012' có thể là ngày 2 tháng 1 năm 2012 hoặc ngày 1 tháng 2 năm 2012, tuy nhiên' 20120102' là ** luôn luôn ** Ngày 2 tháng 1 năm 2012 – GarethD

Trả lời

21

Nó không hoàn toàn rõ ràng mà bạn muốn, vì vậy bạn có thể thử:

  • Đối với định dạng tháng ngày năm:

    INSERT INTO Reserves VALUES(22, 101, TO_DATE('01-01-1998','MM-DD-YYYY'));

  • Đối với định dạng ngày tháng năm:

    INSERT INTO Reserves VALUES(22, 101, TO_DATE('01-01-1998','DD-MM-YYYY'));

Ngoài ra, đề nghị đọc: Oracle functions: TO_DATE

0

Hãy thử '1998-01-01'.

Tôi tin định dạng ngày mặc định cho oracle là yyyy-mm-dd. Bạn có thể thay đổi mặc định cho phiên của bạn bằng cách sử dụng thay đổi phiên thiết nls_date_format = 'mm-dd-yyyy'

Hãy nhớ rằng hầu hết khách hàng cho phép bạn thiết lập này để bất cứ điều gì bạn muốn vĩnh viễn

9

Bạn có thể sử dụng date từ khóa để xác định một chuỗi ngày ANSI tiêu chuẩn:

INSERT INTO Reserves VALUES(22, 101, date '1998-01-01'); 

Trong trường hợp này, định dạng là YYYY-MM-DD, hoặc 01 tháng 1, 1998.

+0

Cảm ơn Bob. Tôi đã hy vọng có một cách mà tôi sẽ không phải sử dụng chức năng TO_DATE. – Matt

5

Như @Jody cũng đã đề cập,
Bạn có thể thay đổi mặc định cho phiên của bạn bằng cách thực hiện mã này một lần trước khi INSERT:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY';

Bạn có thể thay đổi định dạng trong bất kỳ thứ tự bạn muốn.

Nguồn:dba-oracle.com

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