在select中计算日期范围

时间:2013-03-18 09:27:09

标签: sql-server-2008

我正在设计一个网站,以接受我网站的广告。我的网站将获得有效广告列表(经过验证的广告并且还有信用额度),并会显示这些广告。我的广告表中包含验证广告的字段:

  • TotalDaysToShow int'将展示广告的总天数
  • StartDate datetime
  • 已验证位
  • LastShowed datetime

我想举例说明4个广告 - 使用类似于此的查询:

SELECT TOP 4 ImageId,
             Url
FROM   ads
WHERE  verified = 1 AND .......... 
ORDER  BY LastShowed ASC

问题在于,如果我可以简单地使用所有广告的TotalDaysToShow相同:

declare @d= dateadd(day, @TotalDaysToShow, starttime)然后使用它:

SELECT TOP 4 ImageId,
             Url
FROM   ads
WHERE  verified = 1
       AND @d > Getdate()
ORDER  BY LastShowed ASC

是否有可能为每个人计算出来?

SELECT TOP 4 ImageId,
             Url
FROM   ads
WHERE  verified = 1
       AND Dateadd(day, TotalDaysToShow, startdate) > Getdate()
ORDER  BY LastShowed ASC

提前致谢

1 个答案:

答案 0 :(得分:1)

是的,但我相信你会发现这个SQL子句更有效率

AND startdate BETWEEN Dateadd(day, -TotalDaysToShow, getdate()) AND getdate() 

因为它将表字段与两个常量进行比较。