载入中,请稍候..

热门关键词 :  存储  灾难恢复  备份  VERITAS  Symantec  RAID  虚拟化  重复删除技术  pc3000   NAS   SAN  

您的位置: 回到首页 > 虚拟化 > MSSQL计算两个日期相差的工作天数

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

2011-10-9  14:48:49

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<=@i and type='P'
     else
     insert @t select dateadd(dd,number,@dt_begin) from master..spt_values
     where number<=@i and type='P'
     return(select count(*) from @t where (datepart(weekday,dt)+@@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,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt
 ELSE
  SET @bz=0
    WHILE @dt_begin<=@dt_end
    BEGIN
  SELECT @workday=CASE
     WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7 BETWEEN 1 AND 5
  THEN @workday+1 ELSE @workday END,
  @dt_begin=@dt_begin+1
 END
 RETURN(CASE WHEN @bz=1 THEN -@workday ELSE @workday END)
END
GO
select dbo.f_WorkDay('2009-10-10','2009-10-1')
/*
-----------
-7
*/

 

编辑:
标签:MSSQL日期计算  
将本文收藏到网摘: google书签  新浪ViVi   Poco网摘  365key天天网摘   yahoo收藏  windows live书签  添加到del.cio.us  加入收客收藏  分享到饭否  天极网摘  和讯网摘  百度收藏  QQ书签  有道阅读
分类:虚拟化 | 评论:0 | 引用:0 | 浏览:576  | 引用本文

您也可以阅读与此文相关的文章

所有评论
  • * 名称
  • * 邮箱
  • 网站链接
  • 正文(*)(留言最长字数:1000)

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。