我的SQL查询有一个小问题。我正在使用GETDATE函数,但是,假设我在17:00执行脚本,它将在2011年12月12日17:00至2011年12月18日之间恢复记录。我怎样才能把整个12/12/2011-12/18/2011的记录都拉出来--基本上忽略时间。
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate > (GETDATE()-6)
在SQLServer 2008及更新版本中,可以将DateTime
转到Date
,它移除时间元素。
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate >= (cast(GETDATE()-6 as date))
在SQLServer 2005及以下版本中,可以使用:
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate >= DateAdd(Day, Datediff(Day,0, GetDate() -6), 0)
这是我发现的最简单的东西
-- Midnight floor of current date
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()))
DATEDIFF返回1900-1-1之前或之后的整数天数,转换日期时间将返回到午夜的那个日期。
因为DateDiff返回一个整数,所以可以使用加或减天数来获得正确的偏移量。
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()) + @dayOffset)
结果表明,可以将5添加到GetDate()中,并且按预期工作。
-- Round Current time to midnight today or midnight tomorrow
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE() + .5))
我在SQLServer 2008上做了所有的尝试,但我认为这些功能也适用于2005年。