我正在尝试创建一个函数,该函数将以用户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
答案 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
将返回NULL
。 SUM()
随后将返回NULL
。
请注意,我将n
更改为minute
。这更具可读性。 (我不知道有人将“分”选项设为“ n”,这让我觉得“纳秒”。)
在这种情况下,如果您实际上希望函数返回0
,请使用COALESCE()
:
RETURN COALESCE(@returnValue, 0);