将SQL日期时间舍入到午夜

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我的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)  
m9747785m9747785提问于
123456a134回答于

在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年。

扫码关注云+社区