首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql函数:计算时间差(除周六和周日外)的天数

2012-01-14 
求一个sql函数:计算时间差(除周六和周日外)的天数如题,请高手帮忙一下,应该有人遇到过这个问题吧?感谢![解

求一个sql函数:计算时间差(除周六和周日外)的天数
如题,

请高手帮忙一下,应该有人遇到过这个问题吧?

感谢!

[解决办法]
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
IF @dt_begin> @dt_end
SELECT @bz=1,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt
ELSE
SET @bz=0
SELECT @i=DATEDIFF(Day,@dt_begin,@dt_end)+1,
@workday=@i/7*5,
@dt_begin=DATEADD(Day,@i/7*7,@dt_begin)
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
[解决办法]
create function fn_test(@begin datetime,@end datetime)
returns int
As
BEGIN
declare @i int,@j int
set @i=0
set @j=0
if @end> @begin
begin
while dateadd(d,@i,@begin) <=@end
begin
if datepart(weekday,dateadd(d,@i,@begin)) not in(1,7)
set @j=@j+1
set @i=@i+1
end
end

return @j

END

热点排行