嗨我有以下功能来解决两个日期之间的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
答案 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