2013-07-22 20 views
5

Stworzyłem tabelę w mojej bazy danych:SQL DML: Nieprawidłowa wartość data (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) 
); 

włożeniu pewne wartości:

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

ja dostaję ten błąd:

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

Jestem dość zaskoczony, ponieważ już podążyłem za formatem YYYY-MM-DD. Jakaś pomoc?

Odpowiedz

7

Jak wykazano poniżej 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' .

związku z tym, wyrażenie 2013-05-21 nie jest ważny Data MySQL dosłownym (to jest w istocie wyrażenie arytmetyczne, składający się z dwóch odejmowania: to powoduje całkowitą 1987). Aby zachować zgodność z jednym z wymienionych powyżej formatów literowych, musisz albo podać literalną datę jako ciąg znaków i/lub usunąć ograniczniki.

+0

Dziękuję bardzo. –

+0

To ledwo widać, że mówisz tutaj o brakujących cytatach. – ebyrob

+0

@ebyrob: To dlatego, że nie jestem. Istnieje całkowicie poprawny format literalny dla dat, które nie wymagają cytatów: w tym przypadku wystarczy usunąć ograniczniki. – eggyal

4

Brakuje z ' apostrofów wokół wartości issue_date dla mojego testu wstawia rekordy powodzeniem

Spróbuj

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

Dziękuję bardzo. Ta aplikacja internetowa jest również bardzo przydatna. –

2

trzeba umieścić datę dosłowne w cudzysłowach . Komunikat o błędzie mówi: 1987, ponieważ niecytowana data jest odczytywana jako wyrażenie 2013 minus 5 minus 21, które jest 1987.

Twoje daty mogą być następujące: '2013-05-21' lub '20130521' lub kilka innych formatów objętych documentation.

+0

Dziękuję bardzo. –