我有一个 TSQL 函数,我认为(我对 SQL 语法不强)在调用时会删除周末:
ALTER FUNCTION dbo.fn_WorkDays (@StartDate AS DATETIME, @EndDate AS DATETIME)
--Define the output data type.
RETURNS INT
AS
--Calculate the RETURN of the function.
BEGIN
RETURN (
SELECT
(DATEDIFF(dd,@StartDate, @EndDate)+1)--Start with total number of days including weekends +1 Includes the day run
-(DATEDIFF(wk,@StartDate, @EndDate)*2)--Subtact 2 days for each full weekend
-(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' --If StartDate is a Sunday, Subtract 1
THEN 1
ELSE 0
END)
-(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday'--If EndDate is a Saturday, Subtract 1
THEN 1
ELSE 0
END))
END
但我也想取消任何现有的银行假期,我可以使用与此类似的代码从表格中获得:
SELECT COUNT([Date])
FROM [InvoiceManagement].[dbo].[tblBankHolidays]
WHERE [Date] BETWEEN '2006-04-14' AND '2006-05-29'--eventually replace dates with @StartDate, @EndDate
是否可以将上述选择拼接到函数中,以便在返回 INT 之前从结果中减去任何现有的银行持有人?如果是这样,我将不胜感激,因为我不擅长 TSQL