我的SQL查询有一个小问题。我使用的是GETDATE函数,但是,假设我在下午5点执行脚本,它将在12/12/2011 5‘m到12/18/2011 5’m之间拉出记录我怎么才能让它把整个12/12/2011 - 12/18/2011的记录拉出来,基本上忽略时间。
我的脚本:
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate > (GETDATE()-6)
发布于 2011-12-19 06:29:29
在SQL Server2008和更高版本中,可以将时间转换为Date
,这会删除DateTime
元素。
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate >= (cast(GETDATE()-6 as date))
在SQL Server 2005及更低版本中,您可以使用:
WHERE Orders.OrderStatus = 'Shipped'
AND Orders.ShipDate >= DateAdd(Day, Datediff(Day,0, GetDate() -6), 0)
发布于 2012-06-21 06:29:39
这是我找到的最简单的东西
-- Midnight floor of current date
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()))
DATEDIFF返回1900-1-1之前或自1900-1-1以来的整数天数,Convert Datetime友好地在午夜将其返回到该日期。
由于DateDiff返回一个整数,您可以使用add或subtract days来获得正确的偏移量。
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()) + @dayOffset)
这不是四舍五入,这是truncating...But,我想这就是我们要问的。(为了舍入,添加一个和truncate...and,它也不是舍入的,那是天花板,但也很可能是你想要的。要真正舍入,请添加.5 (这行吗?)然后截断。
事实证明,您可以将.5添加到GetDate()中,它就会按预期工作。
-- Round Current time to midnight today or midnight tomorrow
SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE() + .5))
我在SQL Server2008上做了所有的测试,但我认为这些功能也适用于2005年。
发布于 2014-08-28 07:33:13
--
-- SQL DATEDIFF getting midnight time parts
--
SELECT GETDATE() AS Now,
Convert(DateTime, DATEDIFF(DAY, 0, GETDATE())) AS MidnightToday,
Convert(DateTime, DATEDIFF(DAY, -1, GETDATE())) AS MidnightNextDay,
Convert(DateTime, DATEDIFF(DAY, 1, GETDATE())) AS MidnightYesterDay
go
Now MidnightToday MidnightNextDay MidnightYesterDay
-------------------- --------------------- --------------------- ---------------------
8/27/2014 4:30:22 PM 8/27/2014 12:00:00 AM 8/28/2014 12:00:00 AM 8/26/2014 12:00:00 AM
https://stackoverflow.com/questions/8555316
复制相似问题