2013-07-22 15 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

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の日付ではない(これは、2つの減算からなる、実際には演算式である:それは整数1987になります)。上で詳述したリテラルフォーマットの1つに従うためには、日付リテラルを文字列として引用符で囲むか、区切り文字を削除する必要があります。

+0

ありがとうございます。 –

+0

ここで引用符がないことについてはほとんど話していません。 – ebyrob

+0

@ebyrob:そうでないからです。引用符を必要としない日付のための完全に有効なリテラルフォーマットがあります:この場合、区切り文字を削除するだけです。 – eggyal

4

あなたはそれが成功し

あなたが引用符でリテラル日付を配置する必要があり、この

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

ありがとうございました。そのWebアプリも非常に便利です。 –

2

を試してみて、レコードを挿入します私のテストのためのissue_date値の周り'単一引用符で不足しています。引用符で囲まれていない日付が2013 minus 5 minus 211987という式として読み取られているため、エラーメッセージには1987と表示されます。

お使いの日付は'2013-05-21'または'20130521'のようになります。または、documentationでカバーされている他の形式もあります。

Date and Time Literals下で文書化されるように
+0

ありがとうございました。 –