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 に答える