MSSQL 计算两个日期相差的工作天数的语句

MSSQL 21NN 6个月前 (05-24) 33次浏览 已收录 0个评论 扫描二维码
复制代码 代码如下:
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
declare @i int
select @i=abs(datediff(dd,@dt_begin,@dt_end))
declare @t table(dt datetime)
if @dt_begin>@dt_end
insert @t select dateadd(dd,number,@dt_end) from master..spt_values
where number<[email protected] and type=’P’
else
insert @t select dateadd(dd,number,@dt_begin) from master..spt_values
where number<[email protected] and type=’P’
return(select count(*) from @t where (datepart(weekday,dt)[email protected]@datefirst-1)%7 between 1 and 5)
END
GO
select dbo.f_WorkDay(‘2009-10-10′,’2009-10-1’)
/*
———–
7
(1 個資料列受到影響)
*/
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
DECLARE @workday int,@i int,@bz bit,@dt datetime
set @workday=0
IF @dt_begin>@dt_end
SELECT @bz=1,@[email protected]_begin,@[email protected]_end,@[email protected]
ELSE
SET @bz=0
WHILE @dt_begin<[email protected]_end
BEGIN
SELECT @workday=CASE
WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7 BETWEEN 1 AND 5
THEN @workday+1 ELSE @workday END,
@[email protected]_begin+1
END
RETURN(CASE WHEN @bz=1 THEN [email protected] ELSE @workday END)
END
GO
select dbo.f_WorkDay(‘2009-10-10′,’2009-10-1’)
/*
———–
-7
*/

乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MSSQL 计算两个日期相差的工作天数的语句
喜欢 (0)
[1353713598@qq.com]
分享 (0)
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址