当前位置: 首页 > 图文教程 > 数据库 > MSSQL > MSSQL 计算两个日期相差的工作天数的语句

MSSQL
mssql 两种数据插入方式
mssql @@ERROR 使用
sqlserver 数据库日志备份和恢复步骤
SQL Server日志过大会影响查询结果
SQLserver 实现分组统计查询(按月、小时分组)
SQL语句查询是否为空 =null及null
对有insert触发器表取IDENTITY值时发现的问题
SQL SERVER 查询正在实行的SQL语句
sql 随机抽取几条数据的方法 推荐
sql 多条件组合查询,并根据指定类别找出所有最小子类别的SQL语句备忘
Java 实现连接sql server 2000
SQL Server 不存在或访问被拒绝(转)
分页查询 效率最高
sqlserver 系统存储过程 中文说明
sql 多表连接查询
SQL SERVER 自增列
丢失的数据忘记备份的处理方法[图文]
SqlServer 序号列的实现方法
MsSql 存储过程分页代码 [收集多篇]
SQLServer 数据库中如何保持数据一致性

MSSQL 计算两个日期相差的工作天数的语句


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 91 ::
收藏到网摘: n/a

MSSQL计算两个日期相差的工作天数的代码,需要的朋友可以参考下。
复制代码 代码如下:

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
*/