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

问题描述 投票:0回答:2

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

请参阅下面我已经尝试过的内容

DELETE FROM membership
WHERE (SELECT EXTRACT (YEAR FROM end_date)) <
(SELECT EXTRACT (YEAR FROM (SELECT DATE_ADD( CURDATE(), INTERVAL -4 YEAR))))

我希望在我的表格中删除2016年及之前的结果

提前致谢

mysql date intervals rowdeleting
2个回答
2
投票

这将删除具有2016年或更早年份的end_date的所有内容:

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

编辑:如果要删除end_date超过3年的所有内容:

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

0
投票

一些说明:

  • 将裸列end_date与值进行比较,作为日期类型
  • 在运行DELETE之前在SELECT语句中测试表达式

第一个日期值是否大于要删除的行的end_date?在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

或者如果我们知道我们需要的日期值是'2015-04-05''2017-01-01'那么我们可以将其指定为文字:

SELECT m.* 
  FROM membership m 
 WHERE m.end_date < '2017-01-01' + INTERVAL 0 MONTH
 ORDER BY m.end_date DESC

在我们确认SELECT语句返回我们想要删除的行集之后,我们可以用SELECT替换DELETE关键字。

© www.soinside.com 2019 - 2024. All rights reserved.