如何在sqlserver中获取“x”分钟前添加的行?

时间:2014-10-22 12:49:18

标签: sql-server sql-server-2008 datediff

我希望获得之前添加'x' minutes的所有行。

SELECT [PromoCodeID]
      ,[CustomerID]
      ,[DiscountAmount]
      ,[AddedBy]
      ,[AddedDate]
      ,[ModifiedBy]
      ,[ModifiedDate]
 FROM [tbl_PromoCodesNewCustomer]
 Where....

例如: 从今天的日期开始前30分钟添加的记录

注意:记录添加日期会添加到'AddedDate'数据类型为DATETIME的字段中。

3 个答案:

答案 0 :(得分:0)

编辑:

我建议您使用UTC日期和时间填充addedDate字段,否则您可能会遇到在不同服务器\时区或时间更改日之间管理数据的问题。

所以,如果我们考虑这个,那么where子句将是:

WHERE DATEDIFF(mi,addedDate,GETUTCDATE)< 30

答案 1 :(得分:0)

您可以使用:

SELECT [PromoCodeID]
      ,[CustomerID]
      ,[DiscountAmount]
      ,[AddedBy]
      ,[AddedDate] AS added
      ,[ModifiedBy]
      ,[ModifiedDate]
FROM [tbl_PromoCodesNewCustomer]
WHERE DATEADD(minute,x,added) > GETDATE() 

DATEADD中的“x”是您想要的分钟数。

答案 2 :(得分:0)

我建议对FirstHorizo​​n的答案有一个轻微的变化:

SELECT [PromoCodeID]
      ,[CustomerID]
      ,[DiscountAmount]
      ,[AddedBy]
      ,[AddedDate] AS added
      ,[ModifiedBy]
      ,[ModifiedDate]
FROM [tbl_PromoCodesNewCustomer]
WHERE AddedDate < DATEADD(minute * -1,x,getdate())

更改可能看起来很小但是根据所涉及的行数,索引以及查询优化器评估的一些其他因素,此查询可能会执行得更好,因为没有对数据进行计算。

here是一篇解释其原因的文章(请参阅第二段,&#39;在ON或WHERE子句中使用比较中的函数&#39;)。