我不知道它是否对某人有用但我疯狂寻找解决方案并最终自己做了。这是一个函数(根据作为参数传递的日期),将相同的日期和大致时间返回到最接近的5的倍数。这是一个慢查询,所以如果有人有更好的解决方案,欢迎。问候。
CREATE FUNCTION [dbo].[RoundTime] (@Time DATETIME) RETURNS DATETIME
AS
BEGIN
DECLARE @min nvarchar(50)
DECLARE @val int
DECLARE @hour int
DECLARE @temp int
DECLARE @day datetime
DECLARE @date datetime
SET @date = CONVERT(DATETIME, @Time, 120)
SET @day = (select DATEADD(dd, 0, DATEDIFF(dd, 0, @date)))
SET @hour = (select datepart(hour,@date))
SET @min = (select datepart(minute,@date))
IF LEN(@min) > 1
BEGIN
SET @val = CAST(substring(@min, 2, 1) as int)
END
else
BEGIN
SET @val = CAST(substring(@min, 1, 1) as int)
END
IF @val <= 2
BEGIN
SET @val = CAST(CAST(@min as int) - @val as int)
END
else
BEGIN
IF (@val <> 5)
BEGIN
SET @temp = 5 - CAST(@min%5 as int)
SET @val = CAST(CAST(@min as int) + @temp as int)
END
IF (@val = 60)
BEGIN
SET @val = 0
SET @hour = @hour + 1
END
IF (@hour = 24)
BEGIN
SET @day = DATEADD(day,1,@day)
SET @hour = 0
SET @min = 0
END
END
RETURN CONVERT(datetime, CAST(DATEPART(YYYY, @day) as nvarchar) + '-' + CAST(DATEPART(MM, @day) as nvarchar) + '-' +
CAST(DATEPART(dd, @day) as nvarchar) + ' ' + CAST(@hour as nvarchar) + ':' + CAST(@val as nvarchar), 120)
END
答案 0 :(得分:16)
您可以计算自纪元以来的分钟数:
datediff(minute,0,getdate())
通过除以并乘以整数15来舍入到15分钟:
datediff(minute,0,getdate()) / 15 * 15
然后添加时代:
dateadd(minute, datediff(minute,0,getdate()) / 15 * 15, 0)
例如:
select dateadd(minute, datediff(minute,0,getdate()) / 15 * 15, 0)
-->
2013-11-12 10:45:00.000
答案 1 :(得分:13)
创建此功能
create function f_round5min
(
@date datetime
) returns datetime
as
begin -- adding 150 seconds to round off instead of truncating
return dateadd(minute, datediff(minute, '1900-01-01', dateadd(second, 150, @date))/5*5, 0)
end
使用以下语法:
declare @testtable table(date datetime)
insert @testtable values('2013-11-12 12:00'),('2013-11-12 12:01'),
('2013-11-12 12:02'),('2013-11-12 12:02:29'),('2013-11-12 12:02:30'),
('2013-11-12 12:02:31'),('2013-11-12 12:03'),('2013-11-12 12:04'),
('2013-11-12 12:05')
select date, dbo.f_round5min(date) rounded from @testtable
结果:
date rounded
2013-11-12 12:00:00.000 2013-11-12 12:00:00.000
2013-11-12 12:01:00.000 2013-11-12 12:00:00.000
2013-11-12 12:02:00.000 2013-11-12 12:00:00.000
2013-11-12 12:02:29.000 2013-11-12 12:00:00.000
2013-11-12 12:02:30.000 2013-11-12 12:05:00.000
2013-11-12 12:02:31.000 2013-11-12 12:05:00.000
2013-11-12 12:03:00.000 2013-11-12 12:05:00.000
2013-11-12 12:04:00.000 2013-11-12 12:05:00.000
2013-11-12 12:05:00.000 2013-11-12 12:05:00.000