Я использую функцию, которая в настоящее время вычисляет SLA между двумя прошедшими датами, проверяет NULL-элементы и возвращает 0.
Теперь мне нужно учитывать даты в новой таблице «NonBusinessDays».и уберите их из общего значения SLA.
Как бы я проверил, содержат ли два переданных значения какие-либо даты между их диапазоном и датами других таблиц, если им нужно вывести эту дату из SLAитого.
В настоящее время таблица выглядит так:
CREATE TABLE #NonBusinessDays(
[id] [uniqueidentifier] NOT NULL,
[date] [date] NOT NULL,
[name] [nvarchar](100) NOT NULL,
[type] [nvarchar](50) NOT NULL)
GO
INSERT INTO #NonBusinessDays
([id]
,[date]
,[name]
,[type])
VALUES
('1DF6A335-56F8-4DA7-B9C3-07DBAC9FBA8D'
,'2019-08-26'
,'Summer bank holiday'
,'PublicHoliday')
('0940FDC9-A875-48C5-BED8-0ABFA3AA5AE8',
'2018-05-07',
'Early May bank holiday',
'PublicHoliday')
GO
Итак, моя функция такая:
CREATE FUNCTION dateSLA
(
@date1 DATETIME,
@date2 DATETIME
)
returns INT
AS
BEGIN
declare @days INT
set @days = 0
IF @date1 IS NULL AND @date2 IS NULL
BEGIN
GOTO Final
END
ELSE IF @date1 IS NOT NULL AND @date2 IS NOT NULL
BEGIN
SET @days = DATEDIFF(DAY, CONVERT(DATE, @date1, 103), CONVERT(DATE, @date2, 103))
GOTO Final
END
Final:
return @days
END
GO
Я бы хотел проверить, есть ли какие-либо даты внутриТаблица NonBusinessDays присутствует между параметрами, передаваемыми в функцию, тогда это займет, однако, много дней без SLA.
Пример: если между переданными в параметрах параметрами существуют две даты из BusinessDays, тогда будет взято 2.Таким образом, SLA рассчитывается как 10, но это сделает 8 из-за присутствия 2 нерабочих дней.
Буду признателен за любые указания, если вам потребуется дополнительная информация, пожалуйста, дайте мне знать, и я внесу изменения.