---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 '工作日天數'