2008-10-30 19 views

Trả lời

28

Hãy thử chức năng này

CREATE FUNCTION [dbo].[RoundTime] (@Time datetime, @RoundTo float) 
RETURNS datetime 
AS 
BEGIN 
    DECLARE @RoundedTime smalldatetime 
    DECLARE @Multiplier float 

    SET @Multiplier= 24.0/@RoundTo 

    SET @RoundedTime= ROUND(CAST(CAST(CONVERT(varchar,@Time,121) AS datetime) AS float) * @Multiplier,0)/@Multiplier 

    RETURN @RoundedTime 
END 



select dbo.roundtime('13:15',0.5) 

Các param 1 là thời gian để được làm tròn và thứ 2 sẽ được căn cứ vào danh sách của bạn (0,5 tiếng rưỡi đồng hồ, 1-một giờ, ...)

+0

Nếu bạn sử dụng 121 ở vị trí của 113 nó sẽ nhận được datepart đúng cũng – vzczc

+0

Xin lỗi, 121 ở vị trí của 114 – vzczc

+0

Worth gì mà gia phải được quy định như thập phân ký hiệu của một phần của một giờ. Vì vậy, nếu bạn muốn nó được làm tròn đến khoảng 5 phút, thì đó là 1/12 của một giờ, vì vậy @RoundTo sẽ là 083. – eidylon

5

Cảm ơn rất tốt. Tôi đã sử dụng nó trong dòng làm tròn đến 15 phút

convert(smalldatetime,ROUND(cast(TDatalog.Time as float) * (24/.25),0)/(24/.25)) AS RoundedTime 
Các vấn đề liên quan