将SQL DateTime舍入到午夜

hen*_*ron 72 sql sql-server sql-server-2005 getdate

我的SQL查询有一个小问题.我正在使用GETDATE函数,但是,假设我在下午5点执行脚本,它将在2011年12月12日下午5点至2011年12月18日下午5点之间提取记录.如何使整个12/12/2011 - 12/18/2011的记录基本上忽略时间.

我的剧本:

WHERE Orders.OrderStatus = 'Shipped'  
AND Orders.ShipDate > (GETDATE()-6)  
Run Code Online (Sandbox Code Playgroud)

Dav*_*haw 103

在SQL Server 2008及更高版本中,您可以将其转换DateTime为a Date,从而删除time元素.

WHERE Orders.OrderStatus = 'Shipped'  
AND Orders.ShipDate >= (cast(GETDATE()-6 as date))  
Run Code Online (Sandbox Code Playgroud)

在SQL Server 2005及更低版本中,您可以使用:

WHERE Orders.OrderStatus = 'Shipped'  
AND Orders.ShipDate >= DateAdd(Day, Datediff(Day,0, GetDate() -6), 0)
Run Code Online (Sandbox Code Playgroud)

  • 我猜你没有使用SQL 2008然后:) (2认同)

Dar*_*Lee 47

这是我发现的最简单的事情

-- Midnight floor of current date

SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()))
Run Code Online (Sandbox Code Playgroud)

DATEDIFF返回1900-1-1之前或之后的整数天数,转换日期时间有义务将其带回午夜的该日期.

由于DateDiff返回一个整数,您可以使用加或减天来获得正确的偏移量.

SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()) + @dayOffset)
Run Code Online (Sandbox Code Playgroud)

这不是四舍五入这是截断...但我认为这就是被问到的.(要圆形添加一个并截断...那也不是四舍五入,那个天花板,但很可能也是你想要的.要真正圆形添加.5(这样做吗?)并截断.

事实证明,您可以将.5添加到GetDate()并且它按预期工作.

-- Round Current time to midnight today or midnight tomorrow

SELECT Convert(DateTime, DATEDIFF(DAY, 0, GETDATE() + .5))
Run Code Online (Sandbox Code Playgroud)

我在SQL Server 2008上做了所有试验,但我认为这些功能也适用于2005.


小智 8

--
-- 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 
Run Code Online (Sandbox Code Playgroud)


Ben*_*Ben 7

您可以将日期时间转换为日期,然后再转换回日期时间。这将重置时间戳。

选择 getdate() --2020-05-05 13:53:35.863

选择演员(演员(GETDATE()作为日期)作为日期时间)--2020-05-05 00:00:00.000


小智 5

SELECT getdate()
Run Code Online (Sandbox Code Playgroud)

结果:2012-12-14 16:03:33.360

SELECT convert(datetime,convert(bigint, getdate()))
Run Code Online (Sandbox Code Playgroud)

结果2012-12-15 00:00:00.000

  • 尝试解释您的答案并设置代码格式。 (2认同)
  • 如果时间在中午之后,此代码会将其四舍五入到一天结束时的午夜,这会导致半天的时间都是错误的。 (2认同)