Function 两个日期之间的SQL工作日
嗨,我有以下功能来计算两个日期之间的WD。我的问题是……我有两个日期相同,例如2016年7月6日,我希望WD显示为0,但它显示为1。有没有办法改变WD的计算方式Function 两个日期之间的SQL工作日,function,sql-server-2008,getdate,Function,Sql Server 2008,Getdate,嗨,我有以下功能来计算两个日期之间的WD。我的问题是……我有两个日期相同,例如2016年7月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)
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
破解它
SELECT @WORKDAYS = (DATEDIFF(dd, @StartDate, @EndDate) + 0)
似乎已经完成了任务!:-) 需要减去1
与普通的SQLDateDiff函数一样,相邻两个工作日(如星期二和星期三)之间的工作日数应为1。在星期五和星期六之间,它将是0。从星期五到星期一是1点
declare @StartDate datetime = '1/17/19'
声明@EndDate datetime='1/18/19'
设置@StartDate=DATEADD(dd,DATEDIFF(dd,0,@StartDate),0)
设置@EndDate=DATEADD(dd,DATEDIFF(dd,0,@EndDate),0)
声明@WORKDAYS INT
选择@WORKDAYS=(DATEDIFF(dd、@StartDate、@EndDate)+1)
-(日期差异(周、开始日期、结束日期)*2)
-1
-(DATENAME(dw,@StartDate)=“Sunday”时的大小写为1,否则为0结束)
-(DATENAME(dw,@EndDate)=“Saturday”时的大小写,然后为1,否则为0结束)
选择@WORKDAYS很高兴你很快就明白了!只要提醒一下,就不需要
+0
。