Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL在2021年第一周7天内删除记录时出现错误#1292_Mysql_Date Arithmetic - Fatal编程技术网

MYSQL在2021年第一周7天内删除记录时出现错误#1292

MYSQL在2021年第一周7天内删除记录时出现错误#1292,mysql,date-arithmetic,Mysql,Date Arithmetic,我在MySQL上遇到了一个问题,上周,我在运行这个MySQL脚本时遇到了错误 delete from calendar.schedule WHERE startdate >= DATE(NOW()) - 7 and status = 'ready' 它将显示 #1292-第1行“startdate”列的日期时间值不正确:“20210100”错误 如果我将Mysql脚本更改为 delete from calendar.schedule WHERE startdate >= DAT

我在MySQL上遇到了一个问题,上周,我在运行这个MySQL脚本时遇到了错误

delete from calendar.schedule 
WHERE startdate >= DATE(NOW()) - 7 and status = 'ready'
它将显示

#1292-第1行“startdate”列的日期时间值不正确:“20210100”错误

如果我将Mysql脚本更改为

delete from calendar.schedule 
WHERE startdate >= DATE(NOW()) - 6 and status = 'ready' 
它将正常工作。现在,这段代码没有问题。但它将在明年的第一周出现错误。任何人都可以为此提供帮助吗?非常感谢


威尔逊

你的问题在于这个表达:

DATE(NOW()) - 7
当您尝试从日期中减去
7
时,MySQL会将日期转换为其整数表示形式(在本例中,我假定它是
20210107
)然后从中减去7,得到
20210100
。然后尝试将其与日期时间列进行比较,但失败了,因为
20210100
不是有效日期。使用
6
时,代码会起作用,因为最后得到的是有效的
20210101
。您应该做的是减去一个间隔(请参阅)因此,您使用的是日期算术,而不是整数算术:

CURDATE() - INTERVAL 7 DAY

请注意,
CURDATE()
相当于
DATE(NOW())

如果您正在使用整数进行日期算术,则日期将转换为YYYYMMDD格式的整数,然后减去该值

问题是,这可能会生成一个无效日期的结果整数

例如,当我运行该表达式时,如果NOW()是'2021-01-10',则
DATE('2021-01-10)-10
的计算结果为
20210110-10
,即
20210100

但是没有以
00
作为日期的日期。减法应该是
2020-12-31
,对吗?但是当进行整数减法时,你得到的不是这个

解决方案:使用日期算术,而不是整数算术。您可以通过以下任一方式编写日期算术:

DATE('2021-01-10') - INTERVAL 10 DAY

DATE_SUB('2021-01-10', INTERVAL 10 DAY)

真管用!!!谢谢!