--获取指定月的工作日天数(不考虑国家法定节假日,只排除周六周日, 已在休假行事历中设置休息天的也能获得工作天数)
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工作日计算,只排除周末 在数据库管理和数据分析领域,准确地计算两个日期之间的有效工作日数量是一项非常实用的功能,特别是在需要排除周末(通常指周六和周日)的情况下。这种计算方法对于财务报告、项目...
压缩包里有2个文件,用于计算两个日期相差的工作日天数(排除周末和法定节假日): 1、excel表为2023年日历数据,并且备注工作日、周末,调休、节假日类型,可导入数据库。 2、SQL文件为2023年所有日期的插入SQL,并...
计算除周六日、法定节假日以外两个日期之间的间隔天数
在SQL Server数据库环境中,管理和处理日期数据是常见的任务之一,特别是在构建企业级...在实际应用中,你可能还需要考虑不同国家和地区特定的节假日,以及节假日的调整规则,如闰年、法定假日落在周末时的补假情况等。
适用于中华人民共和国。经国务院批准,现将2024年...六、中秋节:9月15日至17日放假调休,共3天。9月14日(星期六)上班。 七、国庆节:10月1日至7日放假调休,共7天。9月29日(星期日)、10月12日(星期六)上班。
在编程领域,尤其是在数据分析、日程管理或者时间序列分析中,计算两个日期之间的差异并考虑工作日排除节假日和周末是一项常见的任务。C++作为一种强大的系统级编程语言,提供了丰富的库来处理日期和时间操作。本篇...
使用Oracle的SQL函数实现工作日和节假日分组统计 本文介绍了使用Oracle的SQL函数来实现工作日和节假日的分组统计,通过对工作日和节假日的判断和统计,可以更好地合理调度人力物力资源,制定节假日劳务补贴政策。...
sql语句得到开始日期和结束日期之间的工作日天数
根据提供的文件信息,我们可以了解到这段代码的主要目的是在SQL Server中计算出指定月份的所有自然周的起始和结束日期,并将这些信息存储在一个名为`monthWeekBetween`的表中。接下来,我们将详细解释其中的关键概念...
本人编写,通过自己定义的函数计算两个日期之间周末的天数和工作日天数,经过测试,非常好用
SQL Server连接工具是数据库管理员和开发人员用于与Microsoft SQL Server交互的重要软件。这些工具提供了多种功能,包括数据库的创建、管理、查询、备份、恢复以及性能优化等。在本篇文章中,我们将深入探讨SQL ...
1.SQL Server 2014简介.mp4 10.SQL Server 2014定义表主键、外键.mp4 11.SQL Server 2014新增表记录.mp4 12.SQL Server 2014查询表记录.mp4 13.SQL Server 2014修改表记录.mp4 14.SQL Server 2014删除表记录....
SQLServer 数据库 SSH 配置详解 SQLServer 数据库 SSH 配置是将 SQLServer 数据库与 Secure Shell(SSH)协议集成,以实现加密的数据传输和身份验证。本文将详细介绍 SQLServer 数据库 SSH 配置的实现步骤和相关...
Sql Server 2014 安装包 SQL Server 2014是微软推出的一款关系型数据库管理系统,它在企业级数据管理和分析领域扮演着重要的角色。此安装包包含两个主要组件:SQL Management Studio和SQL Server Express。 1. **...
在IT行业中,数据库管理系统是核心组成部分,SQL Server和Oracle分别是微软和甲骨文公司推出的两款广泛应用的关系型数据库系统。在企业级应用中,有时需要在不同的数据库系统间进行数据迁移或兼容性处理,这就涉及到...
SQL Server驱动jar文件是Java应用程序连接到Microsoft SQL Server数据库的关键组件。在Java环境中,为了能够与SQL Server进行数据交互,我们需要一个兼容的 JDBC (Java Database Connectivity) 驱动程序,通常以jar...
**SQL Server ODBC驱动**是连接到Microsoft SQL Server数据库的关键组件,它允许应用程序通过开放数据库连接(ODBC)标准与SQL Server进行通信。ODBC是一种跨平台的数据访问接口,使得不同编程语言和操作系统上的...
SQL Server 2019是Microsoft推出的一款关系型数据库管理系统,是SQL Server系列中的一个重要版本。它提供了强大的数据存储、处理和分析能力,广泛应用于企业级数据库应用开发和数据分析。在本安装包中,主要包含的是...
### SQL Server 2008 附加 SQL Server 2005 数据库 #### 背景介绍 在日常工作中,我们可能会遇到需要将不同版本的 SQL Server 数据库进行迁移或附加的情况。例如,从 SQL Server 2005 升级到 SQL Server 2008 的...
SQL Server客户端安装包是用于与Microsoft SQL Server进行交互的软件组件集合,它包含了连接到SQL Server、执行查询、管理数据库以及进行数据导入导出等任务所需的工具。在本压缩包中,主要包含了一个名为"SQL ...