我正在尝试创建一个函数,该函数以给定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
如果您的完成状态表示为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);