2013-07-22 4 views
5

Я создал таблицу в моей базе данных:SQL DML: Некорректное значение даты (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) 
); 

Я вставил несколько значений:

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

Я получаю эту ошибку:

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

Я довольно тупик, потому что я уже следовал за форматом YYYY-MM-DD. Любая помощь?

ответ

7

Как указано под 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' .

Поэтому выражение 2013-05-21 не является действительной датой MySQL буквальным (это на самом деле арифметическое выражение, состоящее из двух вычитаний: это приводит к целому числу 1987). Чтобы соответствовать одному из форматов, описанных выше, вы должны либо указать свой литер даты как строку, либо удалить разделители.

+0

Большое спасибо. –

+0

Непонятно, что вы говорите о недостающих котировках здесь. – ebyrob

+0

@ebyrob: Это потому, что я нет. Существует идеальный литеральный формат для дат, который не требует кавычек: в этом случае нужно просто удалить разделители. – eggyal

4

Вы пропали без вести с ' одинарных кавычек вокруг issue_date значения для моего теста он вставляет запись успешно

Попробуйте

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

спасибо. Это приложение очень полезно. –

2

Вам нужно поставить дату буквальной в кавычки , Сообщение об ошибке говорит 1987, потому что некотированная дата считывается как выражение 2013 minus 5 minus 21, которое равно 1987.

Ваши даты могут быть такими: '2013-05-21' или '20130521' или пару других форматов, охватываемых в documentation.

+0

спасибо. –