Как я могу создать функцию в SQL с 2 параметрами? - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь создать функцию, которая суммирует общее количество минут фактической продолжительности для видео с состоянием «Завершено», в качестве параметра указан идентификатор пользователя. Это то, что у меня есть, но я не могу понять, как добавить параметр для статуса «Завершено». Это происходит из другой таблицы 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

1 Ответ

0 голосов
/ 03 сентября 2018

Если ваш законченный статус представлен как 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...