如何在带有2个参数的SQL中创建函数?

时间:2018-09-03 02:16:25

标签: sql sql-server function

我正在尝试创建一个函数,该函数将以用户ID作为参数的“完成”状态的视频的实际持续时间的总分钟数相加。到目前为止,这是我所拥有的,但是我不知道如何为完成状态添加参数。这来自具有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

1 个答案:

答案 0 :(得分: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将返回NULLSUM()随后将返回NULL

请注意,我将n更改为minute。这更具可读性。 (我不知道有人将“分”选项设为“ n”,这让我觉得“纳秒”。)

在这种情况下,如果您实际上希望函数返回0,请使用COALESCE()

    RETURN COALESCE(@returnValue, 0);