如何替换周六或周日前五周的计算日期

问题描述:

我通过从截止日期减去前置时间来计算出货日期。如果计算出的发货日期在星期六或星期日登陆,我希望计算日期更改为前一个星期五。如何替换周六或周日前五周的计算日期

当我使用此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

试试这个:

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