首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算工作日(不包括周末)

计算工作日(不包括周末)
EN

Stack Overflow用户
提问于 2019-08-01 15:48:17
回答 2查看 51关注 0票数 0

对于更新后的列Invoice_Date_to_Scan_Start_Date_Cal,我需要计算工作日并排除周末。我习惯于使用下面的代码来获得结果:

代码语言:javascript
运行
复制
UPDATE FBL1IN_working
SET FBL1IN_working.Invoice_Date_to_Scan_Start_Date_Cal 
 = (datediff (DD, Doc_Date, Scan_Start_Date_Calc) +1) 

-(datediff (wk, Doc_Date, Scan_Start_Date_Calc) *2)

-(case when datename(dw, Doc_Date ) = 'Sunday' then 1 else 0 end)

-(case when datename(dw, Scan_Start_Date_Calc) = 'Saturday' then 1 else 0 end) 

然而,我注意到,在一些计算字段(Invoice_Date_to_Scan_Start_Date_Cal)中存在一到两天的差异。例如:

Doc_Date = 2019-05-02Scan_Start_Date_Calc = 2018-11-19因此,Invoice_Date_to_Scan_Start_Date_Cal结果应该是-119。但是使用上面的代码,我得到了-117的结果。我不知道代码中的错误在哪里。有没有人能帮我这个忙。

谢谢。

EN

Stack Overflow用户

发布于 2019-08-01 16:28:06

如果您只想从数据范围中查找排除周末,您可以尝试下面的代码:

代码语言:javascript
运行
复制
DECLARE @D1 DATETIME = '20190601'
DECLARE @D2 DATETIME = '20190611'
DECLARE @LoopCount INT = (SELECT DATEDIFF(DD,@D1,@D2))

DECLARE @TempTable TABLE
(
    date date
)

WHILE @LoopCount >= 0
BEGIN
   -- Checking not in (1,7) will exclude Suturday and Sunday from the counting
   IF DATEPART(dw,(DATEADD(DD,-@LoopCount,GETDATE()))) NOT IN (1,7)
   BEGIN 
        INSERT INTO @TempTable (date)
        VALUES (DATEADD(DD,-@LoopCount,GETDATE()))
    END
    SET @LoopCount = @LoopCount - 1
END


SELECT COUNT(*) total_working_days
FROM @TempTable
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57304182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档