只是想知道是否有人可以帮助我。我想将SQL日期时间舍入到最接近的5秒
例如,左侧的日期应该在右侧给出以下结果。
我已经看到了类似的分钟间隔解决方案,我试图将它应用到秒,但它没有给出理想的结果。
declare @DT datetime
set @DT = convert(datetime,'14:08:20')
select dateadd(s,(datepart(s,dateadd(s,1,@DT))/5)*5,
dateadd(mi,datediff(mi,0,dateadd(s,1,@DT)),0))
然而,1900-01-01 14:08:23.000给了我1900-01-01 14:08:20.000,这是不正确的。
感谢任何帮助。
答案 0 :(得分:2)
使用DATEPART()和ROUND()时,您可以实现此目标
<强>查询强>
declare @t table (dt datetime);
insert @t
select
'1900-01-01 14:08:20.000' union all select
'1900-01-01 14:08:21.000' union all select
'1900-01-01 14:08:22.000' union all select
'1900-01-01 14:08:23.000' union all select
'1900-01-01 14:08:24.000' union all select
'1900-01-01 14:08:25.000';
select dt,
dateadd(second, round(datepart(second,dt)*2,-1) / 2-datepart(second,dt), dt)
from @t
order by dt;
<强>结果:强>
dt rounded
----------------------- -----------------------
1900-01-01 14:08:20.000 1900-01-01 14:08:20.000
1900-01-01 14:08:21.000 1900-01-01 14:08:20.000
1900-01-01 14:08:22.000 1900-01-01 14:08:20.000
1900-01-01 14:08:23.000 1900-01-01 14:08:25.000
1900-01-01 14:08:24.000 1900-01-01 14:08:25.000
1900-01-01 14:08:25.000 1900-01-01 14:08:25.000