2009-03-23 13 views
2

私は、繰り返しパターンを定義するシステムを持っています。各パターンは基準日(パターンが作成されたときは過去数年になることが多い)と日のカウント(ループ)を持つため、7日間のパターンを定義することができます:SQLの日付のモジュロ演算

表:パターン

ID | BaseDate | DayCount 
----------------------------- 
1 | 01/02/2005 | 7 

表:PatternDetail

PID | Offset | Detail 
---------------------- 
1 | 0  | A 
1 | 1  | B 
1 | 2  | B 
1 | 3  | C 
    etc. 

(詳細列はドメイン固有と関連していない。)

私がしたいことは、ある与えられた作業パターンのためのPatternDetailテーブルの正しいオフセットを日付(今日)が計算した場合です。擬似コードでは、私はどうしますか:

offset = ((today.InDays) - (Pattern.BaseDate.InDays)) % (Pattern.DayCount) 

私はSQLでこれを行うことができます(MSSQL ServerとOracleで動作する必要があります)?言い換えれば、どのようにして2つの日付の間の日数を計算し、この差の法をとることができますか?

答えて

3

私は、PL/SQLで利用できるのか分からないが、T-SQLは、あなたが探しているもののように見えるDATEDIFF機能があります。それだけです

@Offset = ((DATEDIFF(day, @BaseDate, GETDATE()) % @DayCount) 
2

DATEDIFFを使用すると、日数が異なります。これは整数を与える。 %(標準SQLモジュロ演算子)を使用します。

それは簡単ですか?

+0

を。ありがとうございました:)私はSQL構文に非常に慣れていません –

+0

参照のために私はDATEDIFF(日、BaseDate、GETDATE())%DayCount –