两个日期之间的SQL工作日

时间:2016-07-06 13:39:41

标签: function sql-server-2008 getdate

嗨我有以下功能来解决两个日期之间的WD问题。我的查询是...我有两个相同日期的日期,例如。 2016年6月6日我希望WD显示为0,但它显示为1.是否可以改变WD的运行方式?

ALTER FUNCTION [dbo].[CalculateNumberOFWorkDays] (@StartDate datetime, @EndDate datetime)
RETURNS int
AS
BEGIN

 SET @StartDate = DATEADD(dd, DATEDIFF(dd, 0, @StartDate), 0) 
 SET @EndDate = DATEADD(dd, DATEDIFF(dd, 0, @EndDate), 0) 

 DECLARE @WORKDAYS INT
 SELECT @WORKDAYS = (DATEDIFF(dd, @StartDate, @EndDate) + 1)
               -(DATEDIFF(wk, @StartDate, @EndDate) * 2)
           -(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)
           -(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END)

 RETURN @WORKDAYS END

2 个答案:

答案 0 :(得分:0)

破解它......

 SELECT @WORKDAYS = (DATEDIFF(dd, @StartDate, @EndDate) + 0)

似乎完成了这项工作! : - )

答案 1 :(得分:0)

需要减去1。

就像正常的SQL DATEDIFF函数一样,两个相邻工作日之间的工作日数(例如星期二和星期三)应为1。星期五和星期六之间的工作日应为0。星期五和星期一之间的工作日应为1。 / p>

declare @StartDate datetime = '1/17/19'

声明@EndDate datetime ='1/18/19'

SET @StartDate = DATEADD(dd,DATEDIFF(dd,0,@StartDate),0)  SET @EndDate = DATEADD(dd,DATEDIFF(dd,0,@EndDate),0)

声明@WORKDAYS INT  SELECT @WORKDAYS =(DATEDIFF(dd,@StartDate,@EndDate)+1)                -(DATEDIFF(wk,@StartDate,@EndDate)* 2)                -1            -(CASE WHEN DATENAME(dw,@StartDate)='Sunday'然后1 ELSE 0 END)            -(在DATENAME(dw,@EndDate)='Saturday'THEN 1 ELSE 0 END的情况下

选择@WORKDAYS

相关问题