--获取指定月的工作日天数(不考虑国家法定节假日,只排除周六周日, 已在休假行事历中设置休息天的也能获得工作天数)
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
参考:
http://wenku.baidu.com/link?url=fB3F0xZmwig9r2M_1pK4BGN6VcHPW6F3NZuABWU4ye6edhxEZQ0Tue5cOFJRzk1rMo6PPZ1iHdfACxCwRsPqAwzvheuvj7o_L994LQYArZS
http://www.cnblogs.com/xionglee/articles/1444916.html
分享到:
相关推荐
SQL工作日计算,只排除周末SQL工作日计算
压缩包里有2个文件,用于计算两个日期相差的工作日天数(排除周末和法定节假日): 1、excel表为2023年日历数据,并且备注工作日、周末,调休、节假日类型,可导入数据库。 2、SQL文件为2023年所有日期的插入SQL,并...
计算除周六日、法定节假日以外两个日期之间的间隔天数
sqlserver获取当前时间并只需要年月日小时,使用GETDATE和convert函数达到目的
本人编写,通过自己定义的函数计算两个日期之间周末的天数和工作日天数,经过测试,非常好用
sql server 查询当天,本周,本月,本年,30天内的数据的sql语句
本文介绍了提高SQL Server解决方案在负载高峰时期的高性能的全部预备措施:高可用性通常包含了集群。当你需要较高级别的正常运转时间的时候,你需要对SQL Server进行集群。其他的高可用性方法包括地理集群,集群节点...
☆ 资源说明:☆ [Microsoft Press] Microsoft SQL Server 2012 技术内幕 (英文版) [Microsoft Press] Microsoft SQL Server ...[出版日期] 2013年12月09日 [图书页数] 982页 [图书语言] 英语 [图书格式] PDF 格式
打开Sql Server Configuration Manager,里面显示了SQL Server的网络配置,这些到底表示什么含义呢? 图一:MSSQLSERVER的协议 这些配置选项,其实是为了保证客户端和数据库服务器能够正确的连接,以便...
sqlserver 计算当月所有自然周的区间。
SqlServer连接工具SqlServer连接工具SqlServer连接工具
Type 日期类型:(“-”为前一期间,无符号为当期,“+”为后一期间),Y 年,Q 季,M 月,W 周,D 日 例:前一年:-Y,当年:Y,+Y:下一年 datetype : ‘S’返回开始时间,'E'返回结束时间 datetime: 按哪个时间进行...
SQLServer+ 免安装版 SQLServer+是在原有SQLServer2000的基础上改善了数据库安装的繁锁性,让软件企业在发布基于SQLServer2000数据库软件的时候,只要把软件打包进入安装包而不需要再单独安装数据库,也不需要另外...
sql语句得到开始日期和结束日期之间的工作日天数
SQL Server绿色版是SQL Server 2000绿色精简版,SQL Server绿色版只保留 GSQL.EXE 版权,其他附带文件版权归美国微软公司所有,本软件以技术研究为宗旨,请在下载本软件后24小时内删除附带的 SQL Server 文件或替换...
sqlserver离线安装包
Microsoft SQL Server 2008 Native Client (SQL Server Native Client) 是单一动态链接库 (DLL),其中包含 SQL OLE DB 提供者和 SQL ODBC 驱动程序。此链接库针对使用机器码 API (ODBC、OLE DB 和 ADO) 的应用程序...
SQL Server 2000完结篇系列之三:数据并发-彻底掌握SQL Server 2000事务机制
SQL Server 2005 移动版(SQL Server Mobile)或SQL Server 2000 Windows CE 2.0版(SQL Server CE 2.0)的企业和个人用户如果计划与SQL Server 2000或SQL Server 2005数据库保持同步,需要在您运行Microsoft ...
Sql Server 2014 安装包