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

网络编程 2025-03-13 10:00www.168986.cn编程入门

计算两个日期之间的工作天数——SQL Server函数

对于需要在SQL Server中计算两个日期之间的工作天数的人来说,以下是一个值得参考的代码片段。这是一个SQL函数,它接受两个日期作为参数,并返回这两个日期之间的工作天数。让我们深入理解并应用这个函数。

如果存在名为`f_WorkDay`的函数,我们需要删除它。接下来的代码段创建了一个新的函数`f_WorkDay`。

函数定义如下:

```sql

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

BEGIN

SET @bz=1

SET @dt=@dt_begin

SET @dt_begin=@dt_end

SET @dt_end=@dt

END

ELSE

SET @bz=0

-- 循环计算工作天数

WHILE @dt_begin <= @dt_end

BEGIN

SET @workday = CASE

WHEN (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7 BETWEEN 1 AND 5 THEN @workday+1

ELSE @workday

END

SET @dt_begin=@dt_begin+1

END

-- 返回结果,考虑日期的顺序

RETURN (CASE WHEN @bz=1 THEN -@workday ELSE @workday END)

END

```

如何使用这个函数呢?举个例子,如果你想计算从'2009-10-10'到'2009-10-1'的工作天数,你可以这样使用:`select dbo.f_WorkDay('2009-10-10','2009-10-1')`。返回的结果会是-7,表示从'2009-10-1'到'2009-10-10'的工作天数。注意结果可能是正数或负数,这取决于开始日期和结束日期的顺序。函数会考虑周末和非工作日,只计算工作日。这个函数在处理日期计算时非常有用,特别是在需要计算两个日期之间的工作时间时。

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by