如何替换星期六或星期五在周五之前登陆的计算日期

时间:2016-08-01 22:37:04

标签: sql-server date sql-server-2008-r2

我通过从截止日期减去提前期来计算出货日期。如果计算的发货日期是在星期六或星期日,我希望计算的日期更改为前一个星期五。

当我使用此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主题建议在联接中使用CASE,但这会给我转换错误

  

Msg 402,Level 16,State 1,Line 27。

配置服务器使星期日为第1天,星期六为第7天。

1 个答案:

答案 0 :(得分: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