如何在SQL的date字段中插入日期?MySQL插入语句报错求助
解决MySQL INSERT语句中的日期格式错误
嘿,这个问题我太熟悉了!咱们先拆解一下问题出在哪,再给你两种靠谱的解决方案:
问题根源
从你的表结构和错误信息来看,核心问题有两个:
- 你的
sdate和edate字段是**date类型**,这个类型只存储日期部分,不需要带12:00 AM这类时间信息; - MySQL默认只识别
YYYY-MM-DD格式的日期(比如2020-05-28),你用的5/28/2020这种MM/DD/YYYY格式,哪怕加了单引号,MySQL也没法自动解析,所以会抛出1292 (22007)错误。
你的原表结构(方便参考):
+--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | course | varchar(50) | YES | | NULL | | | sdate | date | YES | | NULL | | | edate | date | YES | | NULL | | +--------+-------------+------+-----+---------+-------+
解决方案1:直接使用MySQL支持的日期格式
最简单的方式就是把日期改成YYYY-MM-DD格式,同时去掉多余的时间部分,直接插入:
INSERT INTO dummy VALUES('Tanzeel', 'SQL Bootcamp', '2020-05-28', '2020-11-20'); INSERT INTO dummy VALUES('John', 'ReactJS for Beginners', '2020-06-28', '2020-10-20');
解决方案2:用STR_TO_DATE()转换格式(适合无法修改原日期字符串的场景)
如果你的日期字符串是固定的MM/DD/YYYY 12:00 AM格式(比如从外部文件导入),可以用MySQL的STR_TO_DATE()函数把它转换成合法的日期值:
INSERT INTO dummy VALUES( 'Tanzeel', 'SQL Bootcamp', STR_TO_DATE('5/28/2020 12:00 AM', '%m/%d/%Y %h:%i %p'), STR_TO_DATE('11/20/2020 12:00 AM', '%m/%d/%Y %h:%i %p') ); INSERT INTO dummy VALUES( 'John', 'ReactJS for Beginners', STR_TO_DATE('6/28/2020 12:00 AM', '%m/%d/%Y %h:%i %p'), STR_TO_DATE('10/20/2020 12:00 AM', '%m/%d/%Y %h:%i %p') );
这里的格式符说明:
%m:两位数字的月份(01-12)%d:两位数字的日期(01-31)%Y:四位数字的年份(比如2020)%h:12小时制的小时(01-12)%i:两位数字的分钟(00-59)%p:AM/PM标识
额外提示
如果你的字段是datetime类型(需要存储日期+时间),MySQL的默认格式是YYYY-MM-DD HH:MM:SS,到时候你可以用类似的方法处理~
内容的提问来源于stack exchange,提问作者Tanzeel
相关产品推荐
相关产品推荐

