Некоторые примечания:
- сравнивает пустой столбец
end_date
со значением как тип даты - тестовые выражения в инструкциях SELECT перед запуском DELETE
Какое первое значение даты больше, чем 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
.