SQL DML:日期值不正确 (MySQL)
Posted
技术标签:
【中文标题】SQL DML:日期值不正确 (MySQL)【英文标题】:SQL DML: Incorrect date value (MySQL) 【发布时间】:2013-07-21 13:31:21 【问题描述】:我在我的数据库中创建了一个表:
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 格式。有什么帮助吗?
【问题讨论】:
【参考方案1】:在我的测试中,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
【讨论】:
非常感谢。那个网络应用也很有用。【参考方案2】:您需要将日期文字放在引号中。错误消息显示1987
,因为未加引号的日期被读取为表达式2013 minus 5 minus 21
,即1987
。
您的日期可以是这样的:'2013-05-21'
或 '20130521'
或documentation 中涵盖的其他几种格式。
【讨论】:
【参考方案3】:如Date and Time Literals 中所述:
mysql 可识别以下格式的
DATE
值:作为
'YYYY-MM-DD'
或'YY-MM-DD'
格式的字符串。允许使用“宽松”语法:任何标点字符都可以用作日期部分之间的分隔符。例如,'2012-12-31'
、'2012/12/31'
、'2012^12^31'
和'2012@12@31'
是等价的。作为
'YYYYMMDD'
或'YYMMDD'
格式的不带分隔符的字符串,前提是该字符串作为日期有意义。例如,'20070523'
和'070523'
被解释为'2007-05-23'
,但'071332'
是非法的(它有无意义的月份和日期部分)并变成'0000-00-00'
。作为
YYYYMMDD
或YYMMDD
格式的数字,前提是该数字作为日期有意义。例如,19830905
和830905
被解释为'1983-09-05'
。
因此,表达式 2013-05-21
不是有效的 MySQL 日期文字(它实际上是一个算术表达式,由两个减法组成:它产生整数 1987
)。为了符合上面详述的文字格式之一,您必须将日期文字引用为字符串和/或删除分隔符。
【讨论】:
几乎看不出您在这里谈论缺少引号。 @ebyrob:那是因为我不是。对于不需要引号的日期,有一种完全有效的文字格式:在这种情况下,只需删除分隔符即可。以上是关于SQL DML:日期值不正确 (MySQL)的主要内容,如果未能解决你的问题,请参考以下文章
使用 str_to_date 函数从文件中将数据加载到 MySQL 中的日期时间值不正确
Python MySQLdb 日期时间值不正确:'2018-03-25 02:00:02'
带有消息“SQLSTATE [22007]”的未捕获异常“PDOException”:日期时间格式无效:1366 字符串值不正确