2013-07-22 13 views
5

tôi đã tạo một bảng trong cơ sở dữ liệu của tôi:SQL DML: giá trị ngày tháng không hợp lệ (MySQL)

CREATE TABLE official_receipt(
    student_no INT UNSIGNED, 
    academic_year CHAR(8), 
    trimester ENUM('1', '2', '3'), 
    or_no MEDIUMINT UNSIGNED, 
    issue_date DATE NOT NULL, 
    received_from VARCHAR(255) NOT NULL, 
    amount_of DECIMAL(8,2) NOT NULL, 
    issued_by VARCHAR(255), 
    doc_type ENUM('FULL', 'DOWN', 'INST') NOT NULL, 
    form_of_payment ENUM('CASH', 'INST') NOT NULL, 
    PRIMARY KEY (student_no, academic_year, trimester, or_no) 
); 

tôi chèn một số giá trị:

INSERT INTO official_receipt(student_no , academic_year, trimester, or_no, issue_date, received_from, amount_of, issued_by, doc_type, form_of_payment) 
VALUES 
    (201201121, 'AY201314', '1', 029940, 2013-05-21, 'NAME', 20000.00, NULL, 'DOWN', 'INST'), 
    (201201121, 'AY201314', '1', 029944, 2013-07-23, 'NAME', 8000.00, NULL, 'INST', 'INST'), 
    (201201101, 'AY201314', '1', 029941, 2013-05-21, 'NAME', 56650.00, NULL, 'FULL', 'CASH'), 
    (201201037, 'AY201314', '1', 029942, 2013-05-21, 'NAME', 56650.00, NULL, 'FULL', 'CASH'), 
    (201201142, 'AY201314', '1', 029943, 2013-05-21, 'NAME', 63800.00, NULL, 'FULL', 'CASH'); 

Tôi nhận được lỗi này:

Error Code: 1292. Incorrect date value: '1987' for column 'issue_date' at row 1 

Tôi khá bối rối vì tôi đã theo định dạng YYYY-MM-DD. Bất kỳ giúp đỡ?

Trả lời

7

Như ghi nhận dưới Date and Time Literals:

MySQL recognizes DATE values in these formats:

  • As a string in either 'YYYY-MM-DD' or 'YY-MM-DD' format. A “relaxed” syntax is permitted: Any punctuation character may be used as the delimiter between date parts. For example, '2012-12-31' , '2012/12/31' , '2012^12^31' , and '[email protected]@31' are equivalent.

  • As a string with no delimiters in either 'YYYYMMDD' or 'YYMMDD' format, provided that the string makes sense as a date. For example, '20070523' and '070523' are interpreted as '2007-05-23' , but '071332' is illegal (it has nonsensical month and day parts) and becomes '0000-00-00' .

  • As a number in either YYYYMMDD or YYMMDD format, provided that the number makes sense as a date. For example, 19830905 and 830905 are interpreted as '1983-09-05' .

Do đó, khái niệm 2013-05-21 không phải là một ngày MySQL hợp lệ theo nghĩa đen (nó thực chất là một biểu thức số học, gồm hai subtractions: nó kết quả trong số nguyên 1987). Để tuân thủ một trong các định dạng chữ được nêu chi tiết ở trên, bạn phải báo giá ngày tháng của bạn dưới dạng chuỗi và/hoặc xóa các dấu phân tách.

+0

Cảm ơn bạn rất nhiều. –

+0

Nó là hầu như không rõ ràng bạn đang nói về thiếu dấu ngoặc kép ở đây. – ebyrob

+0

@ebyrob: Đó là vì tôi không. Có một định dạng chữ hoàn toàn hợp lệ cho những ngày không yêu cầu trích dẫn: trong trường hợp này, người ta chỉ cần loại bỏ các dấu phân tách. – eggyal

4

Bạn đang thiếu với ' dấu nháy đơn xung quanh issue_date giá trị cho thử nghiệm của tôi nó chèn các hồ sơ thành công

Hãy thử điều này

INSERT INTO official_receipt(student_no , academic_year, trimester, or_no, issue_date, received_from, amount_of, issued_by, doc_type, form_of_payment) 
VALUES 
    (201201121, 'AY201314', '1', 029940, '2013-05-21', 'NAME', 20000.00, NULL, 'DOWN', 'INST'), 
    (201201121, 'AY201314', '1', 029944, '2013-07-23', 'NAME', 8000.00, NULL, 'INST', 'INST'), 
    (201201101, 'AY201314', '1', 029941, '2013-05-21', 'NAME', 56650.00, NULL, 'FULL', 'CASH'), 
    (201201037, 'AY201314', '1', 029942, '2013-05-21', 'NAME', 56650.00, NULL, 'FULL', 'CASH'), 
    (201201142, 'AY201314', '1', 029943, '2013-05-21', 'NAME', 63800.00, NULL, 'FULL', 'CASH'); 

Here is your fiddle

+0

Cảm ơn bạn rất nhiều. Ứng dụng web đó cũng rất hữu ích. –

2

Bạn cần phải đặt ngày đen trong dấu ngoặc kép . Thông báo lỗi cho biết 1987 vì ngày không được bỏ phiếu đang được đọc dưới dạng biểu thức 2013 minus 5 minus 21, là 1987.

Ngày của bạn có thể như sau: '2013-05-21' hoặc '20130521' hoặc một vài định dạng khác được bao gồm trong documentation.

+0

Cảm ơn bạn rất nhiều. –