2016-08-01 10 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) 

土曜日または日曜日の計算時に金曜日にデフォルトする方法はありますか?日曜日は1日目となるように、サーバーが構成されている

Thisスレッドが参加した場合を示唆しているが、これは

私にメッセージ402、レベル16、状態1、行27変換エラーを与えました土曜日このお試しください日7

+0

を? – Bohemian

+0

それは正しいです、@ボヘミアン、[最新の出荷日]は決して週末の日でなければなりません。 – 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 with modulo 7'を使用しています。これは文化に依存しません。この解決法は... – Shnugo

+0

ありがとうございました。 @ Shnugo、モジュロ7に関する追加情報をありがとうございます。私はこれに注意し、ユーザーに通知しました。 – dmatthew

関連する問題