Как удалить строки таблицы MSSQL, если они старше одного года / одного дня
Я пытаюсь создать запрос PHP для удаления строк таблицы SQL, если order_date
Колонне больше года. Я также хотел бы второй запрос, где строки таблицы будут удалены, если один и тот же столбец является дневным.
Чтобы углубиться, order_date
столбец в моей текущей таблице, tracking_orders
и был создан с использованием части запроса: order_date datetime NOT NULL DEFAULT GETDATE(),
, tracking_orders
Таблица на данный момент выглядит так:
order_date tracking_order account_id
Apr 7 2014 3:49PM 1 1
Apr 7 2014 3:51PM 2 1
День, когда я задаю этот вопрос, 8 апреля 2014 года, поэтому я пытаюсь создать запрос на удаление строк, если order_date
данные за 7 апреля 2013 года, и еще один запрос на удаление строк, еслиorder_date
данные за 7 апреля 2014 года. Кроме того, если данные старше 1 года, я все равно хотел бы их удалить. Например, 7 апреля 2012 г.
Для примера кода я ищу что-то вроде этого:
$sql = 'DELETE * from tracking_orders WHERE order_date == DATE_SUB(getdate(), INTERVAL 1 YEAR)';
И как то так, удалить через один день:
$sql = 'DELETE * from tracking_orders WHERE order_date == DATE_SUB(getdate(), INTERVAL 1 DAY)';
Примечание: выше не работает, потому что DATE_SUB
такое синтаксис MySQL, и я работаю с MSSQL.
Спасибо за любую помощь. Вся помощь очень ценится.
1 ответ
Попробуй это:
DELETE from tracking_orders
WHERE DATEDIFF(dy,order_date, getdate()) = 1
OR DATEDIFF(yy,order_date, getdate()) > 1
Первое условие, где проверяется разница в 1 день, а второе - для разницы, превышающей 1 год. Обратите внимание, что это происходит строго по календарю, поэтому ниже также вернет 1, даже если разница во времени составляет менее 24 часов:
select datediff (dy, '2013-01-01 23:00:00.000', '2013-01-02 22:00:00.000')
Чтобы проверить разницу в 24 часа, используйте только DATEDIFF(hh,order_date, getdate()) = 1