截断日期仅为小时/分钟

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.0002012-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)

  • 这比我见过的任何其他解决方案都要干净得多,值得投票和评论。 (2认同)

Con*_*SFT 6

从 SQL Server 2022 CTP 2.1 开始,SQL 中有一个本机函数可以执行此操作,称为DATETRUNC(). 您可以选择要将日期截断到的日期/时间级别。文档在这里

DATETRUNC(hour, YourDate)
Run Code Online (Sandbox Code Playgroud)


Sma*_*EGA 5

这似乎有效:

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)