MYSQL在2021年第一周7天内删除记录时出现错误#1292
我在MySQL上遇到了一个问题,上周,我在运行这个MySQL脚本时遇到了错误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
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)
真管用!!!谢谢!