Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 两个日期之间的SQL工作日_Function_Sql Server 2008_Getdate - Fatal编程技术网

Function 两个日期之间的SQL工作日

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)

嗨,我有以下功能来计算两个日期之间的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), 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