对于更新后的列Invoice_Date_to_Scan_Start_Date_Cal,我需要计算工作日并排除周末。我习惯于使用下面的代码来获得结果:
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-02和Scan_Start_Date_Calc = 2018-11-19因此,Invoice_Date_to_Scan_Start_Date_Cal结果应该是-119。但是使用上面的代码,我得到了-117的结果。我不知道代码中的错误在哪里。有没有人能帮我这个忙。
谢谢。
发布于 2019-08-01 16:28:06
如果您只想从数据范围中查找排除周末,您可以尝试下面的代码:
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 @TempTablehttps://stackoverflow.com/questions/57304182
复制相似问题