在MySQL上删除从今天开始超过4年的记录

在MySQL上删除从今天开始超过4年的记录,mysql,date,intervals,rowdeleting,Mysql,Date,Intervals,Rowdeleting,当结束日期列超过当前日期3年时,我想从表中删除记录 下面是我已经尝试过的内容 DELETE FROM membership WHERE (SELECT EXTRACT (YEAR FROM end_date)) < (SELECT EXTRACT (YEAR FROM (SELECT DATE_ADD( CURDATE(), INTERVAL -4 YEAR)))) 我希望在我的表格中删除2016年及之前的结果 提前感谢这将删除所有结束日期为2016年或更久的内容: DELETE FRO

当结束日期列超过当前日期3年时,我想从表中删除记录

下面是我已经尝试过的内容

DELETE FROM membership
WHERE (SELECT EXTRACT (YEAR FROM end_date)) <
(SELECT EXTRACT (YEAR FROM (SELECT DATE_ADD( CURDATE(), INTERVAL -4 YEAR))))
我希望在我的表格中删除2016年及之前的结果


提前感谢

这将删除所有结束日期为2016年或更久的内容:

DELETE FROM membership WHERE YEAR(end_date) <= YEAR(CURDATE() - INTERVAL 3 YEAR);
编辑:如果要删除结束日期超过3年的所有内容:

DELETE FROM membership WHERE end_date < NOW() - INTERVAL 3 YEAR; 

这将删除所有结束日期为2016年或更久的内容:

DELETE FROM membership WHERE YEAR(end_date) <= YEAR(CURDATE() - INTERVAL 3 YEAR);
编辑:如果要删除结束日期超过3年的所有内容:

DELETE FROM membership WHERE end_date < NOW() - INTERVAL 3 YEAR; 
一些注意事项:

将裸列end_date作为日期类型与值进行比较 在运行DELETE之前,在SELECT语句中测试表达式 对于要删除的行,第一个大于结束日期的日期值是多少?在SELECT语句中测试该表达式

SELECT DATE_FORMAT( NOW(), '%Y-01-01') + INTERVAL -3 YEAR
返回

2016-01-01
或者,四年前的日期值

SELECT DATE(NOW()) + INTERVAL -4 YEAR
返回:

2015-04-05
调整该表达式,直到它返回我们需要的值。然后我们可以将该表达式包含在语句中,与裸列end_date列进行比较,如下所示:

SELECT m.* 
  FROM membership m 
 WHERE m.end_date < DATE(NOW()) + INTERVAL -4 YEAR
 ORDER BY m.end_date DESC
确认SELECT语句返回要删除的行集后,我们可以用delete替换SELECT关键字。

一些注意事项:

将裸列end_date作为日期类型与值进行比较 在运行DELETE之前,在SELECT语句中测试表达式 对于要删除的行,第一个大于结束日期的日期值是多少?在SELECT语句中测试该表达式

SELECT DATE_FORMAT( NOW(), '%Y-01-01') + INTERVAL -3 YEAR
返回

2016-01-01
或者,四年前的日期值

SELECT DATE(NOW()) + INTERVAL -4 YEAR
返回:

2015-04-05
调整该表达式,直到它返回我们需要的值。然后我们可以将该表达式包含在语句中,与裸列end_date列进行比较,如下所示:

SELECT m.* 
  FROM membership m 
 WHERE m.end_date < DATE(NOW()) + INTERVAL -4 YEAR
 ORDER BY m.end_date DESC

确认SELECT语句返回要删除的行集后,我们可以将SELECT关键字替换为delete。

WHERE End_Date