如果它们超过一年/一天,如何删除MSSQL表行

时间:2014-04-08 15:29:40

标签: php sql sql-server days getdate

如果order_date列超过一年,我正在尝试创建一个PHP查询来删除SQL表行。我还想要第二个查询,如果同一列是一天,表行将被删除。

为了更深入,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

我问这个问题的日期是2014年4月8日,所以我试图在order_date数据是2013年4月7日的情况下进行查询以删除行,如果是,则尝试删除行的另一个查询 order_date数据是2014年4月7日。另外,如果数据超过1年,我仍然希望删除它。例如,2012年4月7日。

对于代码示例,我正在寻找类似的东西:

$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 个答案:

答案 0 :(得分:2)

试试这个:

DELETE from tracking_orders 
WHERE DATEDIFF(dy,order_date, getdate()) = 1 
OR DATEDIFF(yy,order_date, getdate()) > 1

检查差异为1天的第一个条件,以及差异大于1年的第二个条件。请注意,这是严格按日历进行的,因此即使时间差小于24小时,下面也会返回1:

select datediff (dy, '2013-01-01 23:00:00.000', '2013-01-02 22:00:00.000')

要检查24小时差异,请仅使用DATEDIFF(hh,order_date, getdate()) = 1