Если ваш законченный статус представлен как 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);