两个日期之间的 SQL 工作日

问题描述 投票:0回答:2

嗨,我有以下函数来计算两个日期之间的 WD。我的查询是...我有两个日期相同的日期,例如。 06/07/2016,我希望 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
function sql-server-2008 getdate
2个回答
0
投票

破解了它...

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

似乎已经完成了任务! :-)


0
投票

需要减去1。

就像普通的 SQL DATEDIFF 函数一样,两个相邻工作日(例如周二和周三)之间的工作日数应该为 1。周五和周六之间为 0。周五和周一之间为 1。

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

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)
               -1
           -(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)
           -(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END)

 SELECT @WORKDAYS

© www.soinside.com 2019 - 2024. All rights reserved.