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

返回指定开始、结束日期间的工作日天数;开始日期须小于结束日期,否则返回 0

/******************************************************************************
** 功能:返回指定开始、结束日期间的工作日天数;开始日期须小于结束日期,否则返回 0
** 作者:Danny,Li
** 日期:2010-12-09
*******************************************************************************
** 返回值列表
****************************
** 返回值 涵义
** ------- -----------------------------------------------------------
** @intdays 指定开始、结束日期间的工作日天数(包含当天)
**
*******************************************************************************
** 修订日志
****************************
** 日期 作者 修订备注
** ---------- -------- -----------------------------------------------
**
******************************************************************************
*/
CREATE FUNCTION dbo.fun_CalculateWorkdays
(
@startdate DATETIME, -- 开始日期
@enddate DATETIME -- 结束日期(结束日期须大于开始日期)
)
RETURNS INT
AS
BEGIN
DECLARE @intdays INT, @currentdate DATETIME
SET @intdays = 0
SET @currentdate = @startdate
IF (DATEDIFF(d, @startdate, @enddate) < 0 OR @startdate IS NULL OR @enddate IS NULL OR @startdate = '' OR @enddate = '')
SET @intdays = 0
ELSE
BEGIN
WHILE (DATEDIFF(d, @currentdate, @enddate) >= 0)
BEGIN
IF (DATEPART(dw, @currentdate) = 7)
SET @currentdate = DATEADD(d, 1, @currentdate)
IF (DATEPART(dw, @currentdate) = 6)
SET @currentdate = DATEADD(d, 2, @currentdate)
IF (DATEPART(dw, @currentdate) <= 5)
BEGIN
SET @currentdate = DATEADD(d, 1, @currentdate)
SET @intdays = @intdays + 1
END
END
END
RETURN (@intdays)
END

 

你可能感兴趣的:(sql)