10.工作日处理函数(自定义节假日)

本文介绍了一种使用SQL创建节假日表的方法,并通过自定义函数实现两个日期间的工作日计算,以及在指定日期上增加工作日数的功能。此方法适用于需要精确计算工作日的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

if exists (select * from dbo.sysobjects where id = object_id(N'[tb_Holiday]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [tb_Holiday]
GO

--定义节假日表
CREATE TABLE tb_Holiday(
HDate smalldatetime primary key clustered, --节假日期
Name nvarchar(50) not null)             --假日名称
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_WorkDay]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_WorkDay]
GO

--计算两个日期之间的工作天数
CREATE FUNCTION f_WorkDay(
@dt_begin datetime,  --计算的开始日期
@dt_end  datetime   --计算的结束日期
)RETURNS int
AS
BEGIN
	IF @dt_begin>@dt_end
		RETURN(DATEDIFF(Day,@dt_begin,@dt_end)
			+1-(
				SELECT COUNT(*) FROM tb_Holiday
				WHERE HDate BETWEEN @dt_begin AND @dt_end))
	RETURN(-(DATEDIFF(Day,@dt_end,@dt_begin)
		+1-(
			SELECT COUNT(*) FROM tb_Holiday
			WHERE HDate BETWEEN @dt_end AND @dt_begin)))
END
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_WorkDayADD]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_WorkDayADD]
GO

--在指定日期上增加工作天数
CREATE FUNCTION f_WorkDayADD(
@date    datetime,  --基础日期
@workday int       --要增加的工作日数
)RETURNS datetime
AS
BEGIN
	IF @workday>0
		WHILE @workday>0
			SELECT @date=@date+@workday,@workday=count(*)
			FROM tb_Holiday
			WHERE HDate BETWEEN @date AND @date+@workday
	ELSE
		WHILE @workday<0
			SELECT @date=@date+@workday,@workday=-count(*)
			FROM tb_Holiday
			WHERE HDate BETWEEN @date AND @date+@workday
	RETURN(@date)
END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值