【问题标题】:How to Delete MSSQL Table Rows if they are Older than One Year/One Day如果 MSSQL 表行超过一年/一天,如何删除它们
【发布时间】:2014-04-08 15:29:40
【问题描述】:

如果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。

感谢您的帮助。非常感谢所有帮助。

【问题讨论】:

  • 我猜它会很相似,但使用 DATEADD 方法,see this Microsoft Article
  • 那是我之前为你 +1 的。 :) 这是另一个。

标签: php sql sql-server days getdate


【解决方案1】:

试试这个:

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

where 中的第一个条件检查 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

【讨论】:

  • 我正在使用$sql = 'DELETE * from tracking_orders WHERE DATEDIFF(dy,order_date, getdate()) = 1';,我收到错误“'*' 附近的语法不正确。 (严重性 15)`.
  • 很好,谢谢。因此,如果我的其中一行 order_date 数据是 2013 年 6 月 10 日,并且我使用了查询 $sql = 'DELETE * from tracking_orders WHERE DATEDIFF(yy,order_date, getdate()) > 1';,那么在运行查询时它不会被删除吗?
  • 否,因为我们明确检查年份部分的差异是否大于 1。
猜你喜欢
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多