SQL计算两个日期之间的工作天数

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
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值