删除从今天 MySQL 日期算起超过 4 年的记录
Deleting records that are over 4 years old from today's date on MySQL
当结束日期列超过当前日期超过 3 年时,我想从我的 table 中删除记录
请参阅下文了解我已经尝试过的内容
DELETE FROM membership
WHERE (SELECT EXTRACT (YEAR FROM end_date)) <
(SELECT EXTRACT (YEAR FROM (SELECT DATE_ADD( CURDATE(), INTERVAL -4 YEAR))))
我希望在我的 table
中删除 2016 年及之前的结果
提前致谢
这将删除 end_date 年份为 2016 年或更早的所有内容:
DELETE FROM membership WHERE YEAR(end_date) <= YEAR(CURDATE() - INTERVAL 3 YEAR);
编辑:如果您想删除超过 3 年的 end_date 的所有内容:
DELETE FROM membership WHERE end_date < NOW() - INTERVAL 3 YEAR;
一些注意事项:
- 将裸列
end_date
与日期类型的值进行比较
- 测试 SELECT 语句中的表达式,在 运行 DELETE
之前
要删除的行中第一个大于 end_date 的日期值是多少?在 SELECT 语句中测试该表达式。
SELECT DATE_FORMAT( NOW(), '%Y-01-01') + INTERVAL -3 YEAR
returns
2016-01-01
或者,四年前的日期值
SELECT DATE(NOW()) + INTERVAL -4 YEAR
returns:
2015-04-05
调整该表达式,直到它 returns 达到我们需要的值。然后我们可以在语句中包含该表达式,与裸列 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
.
当结束日期列超过当前日期超过 3 年时,我想从我的 table 中删除记录
请参阅下文了解我已经尝试过的内容
DELETE FROM membership
WHERE (SELECT EXTRACT (YEAR FROM end_date)) <
(SELECT EXTRACT (YEAR FROM (SELECT DATE_ADD( CURDATE(), INTERVAL -4 YEAR))))
我希望在我的 table
中删除 2016 年及之前的结果提前致谢
这将删除 end_date 年份为 2016 年或更早的所有内容:
DELETE FROM membership WHERE YEAR(end_date) <= YEAR(CURDATE() - INTERVAL 3 YEAR);
编辑:如果您想删除超过 3 年的 end_date 的所有内容:
DELETE FROM membership WHERE end_date < NOW() - INTERVAL 3 YEAR;
一些注意事项:
- 将裸列
end_date
与日期类型的值进行比较 - 测试 SELECT 语句中的表达式,在 运行 DELETE 之前
要删除的行中第一个大于 end_date 的日期值是多少?在 SELECT 语句中测试该表达式。
SELECT DATE_FORMAT( NOW(), '%Y-01-01') + INTERVAL -3 YEAR
returns
2016-01-01
或者,四年前的日期值
SELECT DATE(NOW()) + INTERVAL -4 YEAR
returns:
2015-04-05
调整该表达式,直到它 returns 达到我们需要的值。然后我们可以在语句中包含该表达式,与裸列 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
.