sql server:自定義計算固定工作日,雙休日函數

来源:互联网 发布:vb.net中declare 编辑:程序博客网 时间:2024/05/24 07:12
---sql server declare @date datetimeset @date='2012-02-03'--getdate()--本月第一天SELECT DATEADD(mm, DATEDIFF(mm,0,@date), 0)--本月最后一天SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,@date)+1, 0))---有個月多少天函數if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetAMonthHowNumber]') and xtype in (N'FN', N'IF', N'TF'))drop function [dbo].[GetAMonthHowNumber]GOCREATE   function  GetAMonthHowNumber(  @date datetime)returns intasbegindeclare @int intselect @int=datediff(dd , @date , dateadd(mm, 1, @date))return @intendGO--select [dbo].[GetAMonthHowNumber] (getdate()) AS '月天數'---計算當月周六,周日有多少天if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetAMonthStatSunNumber]') and xtype in (N'FN', N'IF', N'TF'))drop function [dbo].[GetAMonthStatSunNumber]GOCREATE   function  GetAMonthStatSunNumber(  @date datetime)returns intasbegindeclare @Sdate datetime ,@Edate datetimeSELECT @Sdate=DATEADD(mm, DATEDIFF(mm,0,@date), 0)SELECT @Edate=dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,@date)+1, 0))--set @Sdate='2013-05-01'--set @Edate='2013-05-31'declare @aa table (strdate datetime)  declare @i int  set @i=datediff(day,@Sdate,@Edate)  while(@i>=0)  begin  insert @aa  values (dateadd(day,@i,@Sdate))  set @i=@i-1  end  select @i= count(*)  from @aa where   datepart(weekday,strdate) in (1,7)  --not in (1,7)return @iendgo--select [dbo].[GetAMonthStatSunNumber] (getdate()) AS '雙休日天數'--計算當月除周六,周日有多少天,也是有多少工作日if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetAMonthWorkDayNumber]') and xtype in (N'FN', N'IF', N'TF'))drop function [dbo].[GetAMonthWorkDayNumber]GOCREATE   function  GetAMonthWorkDayNumber(  @date datetime)returns intasbegindeclare @Sdate datetime ,@Edate datetimeSELECT @Sdate=DATEADD(mm, DATEDIFF(mm,0,@date), 0)SELECT @Edate=dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,@date)+1, 0))--set @Sdate='2013-05-01'--set @Edate='2013-05-31'declare @aa table (strdate datetime)  declare @i int  set @i=datediff(day,@Sdate,@Edate)  while(@i>=0)  begin  insert @aa  values (dateadd(day,@i,@Sdate))  set @i=@i-1  end  select @i= count(*)  from @aa where   datepart(weekday,strdate) not in (1,7)  --not in (1,7)return @iendgo---select [dbo].[GetAMonthWorkDayNumber] (getdate()) as '工作日天數'

原创粉丝点击