你能讓像這樣任何給定的分鐘數:
DateAdd(Minute, (DateDiff(minute, 0, getutcdate())/15) * 15, 0)
而不是使用getutcdate()
你可以用你的日期列,變量或表達式。另外,分鐘數可以是一個變量。
declare @minutesQuantize int set @minutesQuantize = 15
DateAdd(Minute, (DateDiff(minute, 0, getutcdate())/@minutesQuantize) * @minutesQuantize, 0)
唯一的規則是日期差異必須適合一個整數I.e.少於20億美元。這意味着如果沒有更復雜的表達式,你就無法做到幾秒或幾毫秒。
如果您需要秒鐘或毫秒做到這一點:
dateadd(ms, (datediff(ms, dateadd(day, datediff(day, 0, @date), 0), @date)/@msInterval)*@msInterval, dateadd(day, datediff(day, 0, @date), 0))
或者,如果你想換到一個函數是:
create function dbo.DateRoundMinutes(@dt datetime, @minutes int)
returns datetime
as begin
return DateAdd(Minute, (DateDiff(minute, 0, @dt)/@minutes) * @minutes, 0)
end
go
create function dbo.DateRoundMilliseconds(@dt datetime, @ms int)
returns datetime
as begin
return dateadd(ms, (datediff(ms, dateadd(day, datediff(day, 0, @dt), 0), @dt)/@ms)*@ms, dateadd(day, datediff(day, 0, @dt), 0))
end
您可以使用這樣的:
select t.dt,
dbo.DateRoundMilliseconds(dt, 500) dt0_5Second, -- Half second
dbo.DateRoundMilliseconds(dt, 5000) dt5second, -- 5 second
dbo.DateRoundMilliseconds(dt, 15000) dt15Second,
dbo.DateRoundMilliseconds(dt, 90000) dt90Second,
dbo.DateRoundMinutes(dt, 2) dt2Minute,
dbo.DateRoundMinutes(dt, 5) dt5Minute,
dbo.DateRoundMinutes(dt, 15) dt15Minute,
dbo.DateRoundMinutes(dt, 90) dt90Minute
from
/* some table having a column dt */