3

最も近い x 分に切り上げる関数が必要です。以下のものを見つけましたが、最も近い x 分に切り上げまたは切り捨てられます。別の値に基づいて、最も近い 30 分または 1 時間に切り上げる必要があります。

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