在插入日期时出现错误 - 日期值不正确:

33

我有一个名为today的列,类型是DATE

当我尝试以格式'07-25-2012'添加日期时,我会收到以下错误信息:

无法运行查询:列的日期值不正确:'07-25-2012'

10个回答

44
MySql接受日期类型列中的日期格式为y-m-d,因此您需要使用STR_TO_DATE函数将日期转换为yyyy-mm-dd格式,以便插入。具体操作如下:
INSERT INTO table_name(today)
VALUES(STR_TO_DATE('07-25-2012','%m-%d-%Y'));

如果你想选择一个与Mysql格式不同的日期格式,你可以尝试使用DATE_FORMAT函数。

SELECT DATE_FORMAT(today, '%m-%d-%y') from table_name;

5
也许已经有所改变,但根据 https://www.w3schools.com/sql/func_mysql_str_to_date.asp 的内容,解析4位数字年份需要使用%Y - Andreas
1
如果日期是可选的,该怎么办? - Wolfgang Blessen

7
您需要将日期转换为YYYY-MM-DD格式,以便使用默认配置将其插入MySQL日期中。其中一种方法是使用STR_TO_DATE()函数:STR_TO_DATE()
insert into your_table (...)
values (...,str_to_date('07-25-2012','%m-%d-%Y'),...);

4
通常情况下,MySQL 使用的日期格式是 'Y-m-d H:i:s'。

8
不是,那是针对日期时间类型的。对于日期类型,默认格式为Y-m-d。 - Scott Chu

3

这是日期格式

DATE类型用于只有日期部分而没有时间部分的值。MySQL以'YYYY-MM-DD'格式检索和显示DATE数值,支持的范围为'1000-01-01'到'9999-12-31'。

为什么在MySQL格式为'2012-07-25'时插入'07-25-2012'格式会出错?实际上,如果sql_mode是传统/严格模式,则会出现错误,否则它将输入0000-00-00并给出警告:1265 - 在第1行的列'col1'被截断的数据


2
我对这个错误有不同的原因。我试图插入一个没有使用引号的日期,结果收到一个奇怪的错误提示,告诉我我尝试插入了一个2003年的日期。

My error message:

尽管我已经使用了YYYY-MM-DD格式,但我忘记在日期周围添加引号。即使它是一个日期而不是字符串,引号仍然是必需的。

这段代码对我有效:VALUES ('$rowt[my_date]') - Akshay Paliwal

2

在mysql中插入日期时,您需要使用YYYY-MM-DD格式。


1
您可以在创建数据表时将“日期”用作数据类型,这样可以避免以上错误。 例如:
CREATE TABLE Employee (birth_date DATE);
INSERT INTO Employee VALUES('1967-11-17');

0

对我有效的方法是:

更改日期DD-MM-YYYY格式:

E1001,John,Thomas,123456,01/09/1976,M

转换为YYYY-MM-DD格式:

E1001,John,Thomas,123456,1976/01/09,M

它运行得非常流畅。


这已经在其他几个答案中提到过了。 - Eric Aya

0

请确保您添加单引号或双引号。我注意到您必须添加"",这样MySQL才会将其作为字符串。

INSERT INTO table_name values 
 ("2001-11-09");

0
你可以使用这段代码。它会很好地工作。
INSERT INTO table_name(today)  
VALUES(STR_TO_DATE('07-25-2012','%m-%d-%Y'));  

实际上,你不能直接将日期存储为字符串,你首先需要将字符串转换为正确格式的日期。我们使用STR_TO_DATE()函数来完成这个任务,该函数需要两个参数:第一个参数是作为字符串表示的日期,第二个参数是你传递第一个参数时使用的日期格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接