puf*_*fos 23 sql t-sql sql-server sql-server-2008
我如何截断sql server 2008中的日期,如下所示:
我有2012-01-02 12:04:11.443
,我只想选择2012-01-02 12:00:00.000
和2012-01-02 12:04:00.000
(小时和分钟级别)
Mik*_*son 44
declare @D as datetime = '2012-01-02T12:04:11.443'
select dateadd(hour, datediff(hour, 0, @D), 0)
select dateadd(minute, datediff(minute, 0, @D), 0)
Run Code Online (Sandbox Code Playgroud)
从 SQL Server 2022 CTP 2.1 开始,SQL 中有一个本机函数可以执行此操作,称为DATETRUNC()
. 您可以选择要将日期截断到的日期/时间级别。文档在这里。
DATETRUNC(hour, YourDate)
Run Code Online (Sandbox Code Playgroud)
这似乎有效:
select [Rounded Time] =
dateadd(mi,datediff(mi,0,dateadd(ss,30,a.DT)),0)
from
(
select dt = convert(datetime,'8:24:29.997')
union all
select dt = convert(datetime,'8:24:30.000')
) a
Run Code Online (Sandbox Code Playgroud)
结果:
Rounded Time
------------------------------------------------------
1900-01-01 08:24:00.000
1900-01-01 08:25:00.000
(2 row(s) affected)
Run Code Online (Sandbox Code Playgroud)