1

只是想知道是否有人可以帮助我。我想将 SQL 日期时间四舍五入到最接近的 5 秒

例如,左边的日期应该在右边给我以下结果。

  • 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

我已经看到了分钟间隔的类似解决方案,并且我尝试将其应用于秒,但它没有给出理想的结果。

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,这是不正确的。

任何帮助表示赞赏。

4

1 回答 1

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
于 2012-11-13T21:19:00.197 回答