2016-08-01 189 views
0

我通過從截止日期減去前置時間來計算出貨日期。如果計算出的發貨日期在星期六或星期日登陸,我希望計算日期更改爲前一個星期五。如何替換週六或週日前五週的計算日期

當我使用此WHERE語句(找到here)時,週六或週日的記錄將從結果中排除。

SELECT 
    due_date, 
    due_date - CAST(lead_time AS NUMERIC(3,0)) AS [Latest Ship Date] 
FROM order_line_table 
WHERE (((DATEPART(dw, due_date - CAST(lead_time AS NUMERIC(3,0))) 
    + @@DATEFIRST) % 7) NOT IN (0,1) 

有沒有辦法默認星期五計算週六或週日? This線表明在加入的情況下,但是這給了我轉換錯誤

消息402,級別16,狀態1,27號線

服務器配置,以便星期日是1天,星期六是第7天。

+0

只是檢查,你想'[最新發貨日期]'永遠不會是一個週末的一天嗎? – Bohemian

+0

這是正確的,@Bohemian,[最新發貨日期]不應該是一個週末的日子。 – dmatthew

回答

1

試試這個:

select 
    due_date, 
    case DATEPART(dw, [Latest Ship Date]) 
    when 1 then DATEADD(DAY, -2, [Latest Ship Date]) 
    when 7 then DATEADD(DAY, -1, [Latest Ship Date]) 
    else [Latest Ship Date] 
    end as [Latest Ship Date] 
from (SELECT 
     due_date, 
     due_date - CAST(lead_time AS NUMERIC(3,0)) AS [Latest Ship Date] 
     FROM order_line_table) x 
+0

原代碼使用'+ @@ DATEFIRST模7',因此文化獨立。這個解決方案不是... – Shnugo

+0

謝謝你,工作。 @Shnugo,感謝您提供關於模7的更多信息。我已經注意到並通知了用戶。 – dmatthew

相關問題