Как удалить строки таблицы 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

Другие вопросы по тегам