2017-03-31 7 views
0

で後方スケジューリングを実装することができます。私の古いシステムでは、私はこれのようなものを持っています。 TSQLを使用して同じロジックを実装することは可能ですか?はどのようにどのように私は、TSQLを使用して、後方のスケジュールを作成することができますTSQL

フィールド名:A-NEST BY

、ここではA-NEST BYための式です。日付フィールド

IF(平日(datesub(AカットBY、7))= 7、datesub(datesub(AカットBY、7)、1)、 は[BY Aをカット]注IF(平日(datesub(AカットBY、7))= 1、datesub(datesub(AカットBY、7)、2)、 datesub(AカットBY、7)))

[A-CUT BY]は計算された日付フィールドです。最初の行のIF(weekday(datesub(A-CUT BY, 7)) = 7, datesub(datesub(A-CUT BY, 7),1),は、日付が7番目の日付の場合は7番目、土曜日の場合は金曜日にスケジュールを移動します。日曜日か月曜日に1つの移行スケジュール

平日(日)、または曜日(日付、形式は)場合:

は、日付の曜日を返します。 2番目の入力はオプションですが、指定する場合は "数字"、 "名前"、または "省略形"のいずれかでなければなりません。 「数字」または省略された場合、結果は数字になります。日曜日は1、月曜日は 、土曜日は7までです。 "name"の場合、結果は日曜日、月曜日などの単語になります。 "abbrev"の場合は となります。

datesub(date、N)またはdatesub 、N、単位は):

は、つまり、日からN日を減算入力日付の前に日付N日返します。 Nが負の場合、 は入力日のN日後の日付を返します。 3番目の入力はオプションです。提供されている場合は、 年、月、日、時間または分のいずれかでなければなりません。提供されない場合、日数が仮定されます。

+0

"A-CUT BY" は何ですか?ここに投稿したコードは有効なt-sqlではありません。 –

+0

私の古いシステムはTrackviaオンラインクラウドデータベースと呼ばれています。「A-CUT BY」は日付です。コードは、ロジックを表示するだけのSQLコードではありません – Joe

+0

"A-CUT BY"とは何ですか?これが何をしようとしているのかについてのいくつかの説明は、答えを得るための長い道のりになります。 –

答えて

3

この質問は、任意の明瞭さを欠いているので、私は完全にここに推測しています。私はあなたがちょうどケース式を使いたいと思う。ここに私があなたが望むかもしれないと思うものの例があります。

set datefirst 7 --Sunday 

declare @ACUTBY datetime = getdate() 

select 
case datepart(WEEKDAY, @ACUTBY) 
    when 1 then 2 
    when 7 then 5 
    else datepart(WEEKDAY, @ACUTBY) 
end as [A-CUT BY] 

--EDIT--

SqlZimは、別の言語または週の最初の日を用いたものを何らかの理由で変更された場合、すべての問題を回避するために、DATEFIRSTを追加するための優れた提案を行いました。

あなたはここにDATEFIRSTについての詳細を読むことができます。 https://docs.microsoft.com/en-us/sql/t-sql/statements/set-datefirst-transact-sql

+0

にスケジュールをありがとう場合は、私が達成したい何thatsのが、私はそれを試してみました '宣言するよう@ACUTBY日時= GETDATE()+ 3 場合の日付要素(WEEKDAY、@ACUTBY) を選択[-CUT BY] '戻り火曜日' 2017-04-03'なく月曜日 '2017-03-03'として1、次いで2 7その後、他の5 @ACUTBY端のみ日曜日または土曜日 – Joe

+1

場合日付調整いいえ、@ジョーではありません。 2015年4月3日は月曜日...または4月3日はZim – scsimon

+1

[xkcd PSA ISO 8601](https://xkcd.com/1179/) – SqlZim

関連する問題