3

我需要一个向上舍入到最接近的 x 分钟的函数。我在下面找到了一个,但它向上或向下舍入到最近的 x 分钟。基于另一个值,我要么需要将其向上舍入到最接近的半小时或小时。

CREATE FUNCTION [dbo].[RoundTime] (@Time DATETIME, @RoundToMin INT)
RETURNS DATETIME
AS
BEGIN
RETURN ROUND(CAST(CAST(CONVERT(VARCHAR,@Time,121) AS DATETIME) AS FLOAT) * (1440/@RoundToMin),0)/(1440/@RoundToMin)
END
GO
4

2 回答 2

1

这会将您的函数更改为四舍五入到任意分钟数。

CREATE FUNCTION [dbo].[RoundUpTime] (@Time DATETIME, @RoundToMin INT)
RETURNS DATETIME
AS
BEGIN
return dateadd(mi, - datepart(mi, @time) + (datepart(mi, @time) + @roundToMin - 1) / @roundToMin * @roundToMin, @Time)
END
GO

注意我将名称更改为 RoundUpTime。警告,它仅适用于 MINUTE 部分,并忽略秒和毫秒。

select dbo.RoundUpTime('20121212 12:30:00.003', 30)
--
2012-12-12 12:30
于 2012-11-14T22:31:34.113 回答
0

将 ROUND 更改为 CEILING 并从 ROUND 中去掉“, 0”:

CREATE FUNCTION [dbo].[RoundTime] (@Time DATETIME, @RoundToMin INT)
RETURNS DATETIME
AS
BEGIN
RETURN CEILING(CAST(CAST(CONVERT(VARCHAR,@Time,121) AS DATETIME) AS FLOAT) * (1440/@RoundToMin))/(1440/@RoundToMin)
END
GO
于 2012-11-14T22:05:20.670 回答