函數定義
CREATE FUNCTION GetVac(@Start DATETIME, @End DATETIME)
RETURNS INT
AS
BEGIN
DECLARE @TotalDays INT, @i INT, @WeekDay INT, @TempDate DATETIME, @Vac INT;
SELECT @TotalDays = DATEDIFF(DAY, @Start, @End);
SELECT @i = 0, @Vac = 0;
WHILE (@i < @TotalDays)
BEGIN
SELECT @TempDate = DATEADD(DAY, @i, @Start);
SELECT @WeekDay = DATEPART(WEEKDAY, @TempDate) - 1; -- 0=Sun, 6=Sat
IF (@WeekDay = 6 OR @WeekDay = 0)
SELECT @Vac = @Vac + 1;
SELECT @i = @i + 1;
END
RETURN @Vac;
END
呼叫範例
SELECT dbo.GetVac('2000-12-10', '2000-12-18'); -- 回傳 3(含 12/10、12/16、12/17)
說明
- 以
WHILE 迴圈逐日判斷 DATEPART(WEEKDAY),累計週六(6)與週日(0)。
- 適用於 SQL Server 2000/2005/2008 等版本。
- 若需排除國定假日,可擴充建立假日表並
NOT IN 排除。