MSSQL计算两个日期相差的工作天数
2009-09-29 11:44
495 查看
-->Title:Generating test data
-->Author:wufeng4552
-->Date :2009-09-29 08:52:38
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
*/
-->Author:wufeng4552
-->Date :2009-09-29 08:52:38
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 计算两个日期相差的工作天数的语句
- SQL计算两个日期之间相差的工作天数
- 计算两个日期相差的工作天数,过滤了周末双休天数
- 计算两个日期相差的工作天数
- 计算两个日期之间相差的工作天数
- Java 计算两个日期相差月数、天数
- Java 计算两个日期相差的天数
- PHP中怎样计算两个日期相差的天数
- 工具方法:JAVA计算两个日期之前相差的天数
- JavaScript计算两个日期之间相差的天数
- Calendar:计算两个日期相差的天数
- 计算两个日期之间相差的天数
- jquery计算两个日期的相差天数
- 分享PHP计算两个日期相差天数的代码
- 利用Struct计算两个日期的相差的天数
- java计算两个日期相差天数
- 计算两个日期相差的天数
- JAVA计算两个日期之间相差的天数
- java计算两个日期之间相差的天数