MSSQL 计算两个日期相差的工作天数的语句_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1826 | 回复: 1   主题: MSSQL 计算两个日期相差的工作天数的语句        下一篇 
wayne
注册用户
等级:中校
经验:1690
发帖:221
精华:0
注册:2011-7-21
状态:离线
发送短消息息给wayne 加好友    发送短消息息给wayne 发消息
发表于: IP:您无权察看 2015-6-19 15:02:23 | [全部帖] [楼主帖] 楼主

 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')

/* 

----------- 

(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

*/

--转自北京联动北方科技有限公司




赞(0)    操作        顶端 
superstar
注册用户
等级:上尉
经验:525
发帖:2
精华:0
注册:2015-6-3
状态:离线
发送短消息息给superstar 加好友    发送短消息息给superstar 发消息
发表于: IP:您无权察看 2015-6-23 10:26:02 | [全部帖] [楼主帖] 2  楼

这么麻烦么 北京联动北方科技有限公司



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论