SQLSERVER 得出指定月的工作日天数(没有考虑国家法定假日,只排除周六周日)...


--获取指定月的工作日天数(不考虑国家法定节假日,只排除周六周日, 已在休假行事历中设置休息天的也能获得工作天数)
CREATE FUNCTION [dbo].[getCountOfWorkdaysOfMonth](@year_in NVARCHAR(4), @month_in NVARCHAR(2), @restDayStr NVARCHAR(100)) --year_in 为四位年,month_in为两位月,@restDayStr为休息天字符串(用逗号分隔)
returns INT --使用函数的前要先写 set datefirst 1 这一句,让一周的第一天为1,即周一
AS
BEGIN
IF(@year_in IS NULL OR @month_in IS NULL)
BEGIN
RETURN NULL
END

DECLARE @firstDayOfMonth VARCHAR(10) --该月的第一天 yyyy-MM-dd格式
DECLARE @howManyDaysOfMonth INT --该月有多少天
DECLARE @dayCusor NUMERIC --循环用的迭代变量
DECLARE @countOfWorkdaysOfMonth INT --该月的工作日总数,初始化为0
DECLARE @dayOfADay VARCHAR --某天为周几 用来判断某天是否为周末
DECLARE @dateOfADay DATETIME --某天的日期 用来获取某天为周几,初始化为该月第一天的日期

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 INT)

IF (@restDayStr IS NOT NULL)
BEGIN
DECLARE @strLength INT
DECLARE @charindexOfComma INT
DECLARE @separator VARCHAR(1)
DECLARE @countOfRestDaysOfMonth INT

SET @separator = ','
SET @charindexOfComma = CHARINDEX(@separator,@restDayStr)
SET @strLength = LEN(@restDayStr)
SET @countOfRestDaysOfMonth = 1
SET @countOfWorkdaysOfMonth = @howManyDaysOfMonth - @countOfRestDaysOfMonth

WHILE @charindexOfComma > 0
BEGIN
SET @countOfRestDaysOfMonth = @countOfRestDaysOfMonth + 1
SET @restDayStr = SUBSTRING(@restDayStr, @charindexOfComma + 1, @strLength)
SET @charindexOfComma = CHARINDEX(@separator,@restDayStr)
END

SET @countOfWorkdaysOfMonth = @howManyDaysOfMonth - @countOfRestDaysOfMonth
END
ELSE
BEGIN
SET @countOfWorkdaysOfMonth = 0
SET @dayCusor = 1

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
END

RETURN @countOfWorkdaysOfMonth
END


[b]参考:[/b]
[url]http://wenku.baidu.com/link?url=fB3F0xZmwig9r2M_1pK4BGN6VcHPW6F3NZuABWU4ye6edhxEZQ0Tue5cOFJRzk1rMo6PPZ1iHdfACxCwRsPqAwzvheuvj7o_L994LQYArZS[/url]

[url]http://www.cnblogs.com/xionglee/articles/1444916.html[/url]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值