SQLSERVER 得出当前月的工作日天数(没考虑国家法定假日,只排除周六周日)
SQLSERVER 得出当前月的工作日天数(没有考虑国家法定假日,只排除周六周日)
CREATE FUNCTION [dbo].[getCountOfWorkdaysOfMonth](@year_in VARCHAR(4), @month_in VARCHAR(2)) --year_in 为四位年,month_in为两位月 returns NUMERIC --使用函数的前要先写 set datefirst 1 这一句,让一周的第一天为1,即周一 AS BEGIN DECLARE @firstDayOfMonth VARCHAR(10) --该月的第一天 yyyy-MM-dd格式 DECLARE @howManyDaysOfMonth NUMERIC --该月有多少天 DECLARE @dayCusor NUMERIC --循环用的迭代变量 DECLARE @countOfWorkdaysOfMonth NUMERIC --该月的工作日总数,初始化为0 DECLARE @dayOfADay VARCHAR --某天为周几 用来判断某天是否为周末 DECLARE @dateOfADay DATETIME --某天的日期 用来获取某天为周几,初始化为该月第一天的日期 SET @countOfWorkdaysOfMonth = 0 SET @dayCusor = 1 SET @firstDayOfMonth = @year_in + '-' + @month_in + '-' + '01' SET @dateOfADay = CONVERT(DATETIME,@firstDayOfMonth,121) SET @howManyDaysOfMonth = CAST(DAY(DATEADD(MONTH, DATEDIFF(MONTH, 0, @dateOfADay) + 1, 0) - 1) AS NUMERIC) WHILE @dayCusor <= @howManyDaysOfMonth BEGIN SET @dayOfADay = DATEPART(WEEKDAY,@dateOfADay) IF @dayOfADay <> '6' AND @dayOfADay <> '7' BEGIN SET @countOfWorkdaysOfMonth = @countOfWorkdaysOfMonth + 1 END SET @dateOfADay = @dateOfADay + 1 SET @dayCusor = @dayCusor + 1 END RETURN @countOfWorkdaysOfMonth END