如何在SQL中创建具有2个参数的函数?
我正在尝试创建一个函数,该函数将给定一个UserID作为参数,对完成状态的视频的实际持续时间的总分钟数求和。这是我到目前为止所拥有的,但我不知道如何为完成状态添加参数。这来自一个具有StatusID和StatusText的不同状态表。或者我会做一个NOTNULL语句吗如何在SQL中创建具有2个参数的函数?,sql,sql-server,function,Sql,Sql Server,Function,我正在尝试创建一个函数,该函数将给定一个UserID作为参数,对完成状态的视频的实际持续时间的总分钟数求和。这是我到目前为止所拥有的,但我不知道如何为完成状态添加参数。这来自一个具有StatusID和StatusText的不同状态表。或者我会做一个NOTNULL语句吗 CREATE FUNCTION dbo.vc_VideoRunTime(@userID int) RETURNS int AS BEGIN DECLARE @returnValue int SELECT @returnValu
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
如果您的完成状态表示为
NULL
endtime,则您的函数正常:
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
为什么??如果任一参数为NULL
,则DATEDIFF()将返回NULL
。然后,SUM()
将返回NULL
注意,我将n
更改为minute
。这更具可读性。(我不知道有谁用“n”选项来表示“分钟”,这让我想到了“纳秒”。)
如果在这种情况下确实希望函数返回0
,请使用COALESCE()
:
是的,我使用的是SQL Server,那么上面的另一个输入参数缺少什么?或者,是否要返回多个值?我只需要返回总分钟数,但某些视频尚未完成,因此结果为空,我正在尝试删除空结果。我只是不知道如何为finished status添加输入参数,以便只获取总分钟数的返回值。您希望函数返回总分钟数
,以及finished status
?为什么不修改WHERE子句,比如WHERE vc_Video.vc_UserID=@UserID和vc_Video.EndDateTime空
子句?
RETURN COALESCE(@returnValue, 0);