如何在SQL中使用2个参数创建函数?

问题描述 投票:1回答:1

我正在尝试创建一个函数,该函数以给定UserID作为参数的完成状态的视频的实际持续时间的总分钟数来求和。这是我到目前为止,但我无法弄清楚如何添加完成状态的参数。这来自Status的另一个表,它具有StatusID和StatusText。或者我会做一个NOT NULL语句?

CREATE FUNCTION dbo.vc_VideoRunTime(@userID int)
RETURNS int AS 
BEGIN 
DECLARE @returnValue int
SELECT @returnValue = DATEDIFF (n, StartDateTime, EndDateTime) FROM vc_Video
WHERE vc_Video.vc_UserID = @userID
RETURN @returnValue
END
GO
sql sql-server function
1个回答
1
投票

如果您的完成状态表示为NULL结束时间,那么您的函数很好:

CREATE FUNCTION dbo.vc_VideoRunTime (
    @userID int
)
RETURNS int AS 
BEGIN 
    DECLARE @returnValue int;
    SELECT @returnValue = SUM(DATEDIFF(minute, v.StartDateTime, v.EndDateTime))
    FROM vc_Video v 
    WHERE v.vc_UserID = @userID ;

    RETURN @returnValue;
END;
GO

为什么?如果任何一个论点是DATEDIFF()NULL将返回NULL。然后SUM()将返回NULL

请注意,我将n更改为minute。这更具可读性。 (我不知道是谁用“分钟”的“n”选项,它让我觉得“纳秒”。)

如果你真的希望函数在这种情况下返回0,那么使用COALESCE()

    RETURN COALESCE(@returnValue, 0);
© www.soinside.com 2019 - 2024. All rights reserved.