2011-09-12 8 views
1

「週刊」または「月刊」可能な周波数範囲(NVARCHAR)に応じて、私はSQL Server Dateadd - selectクエリのelseとの間隔を取得しますか?

SELECT rs.ScheduledStartDate, rs.ScheduledEndDate, rs.Frequency, rs.FreqRange, rs.LastCreated 
FROM RosterSchedule rs 
WHERE dateadd(case when rs.FreqRange = 'Weekly' Then day else month end), rs.Frequency, rs.LastCreated) = GETDATE() 
+0

'GETDATEは()'それが働いた場合でも、それがそうであるように、約3msの精度に現在の時刻を返します。あなたが必要とするものになるために。 –

+0

私はちょうど私の質問に焦点を当てるために簡単にクエリを保持したいと思っているいくつかの変換を行うでしょうどのように私は別の式からdateadd関数の間隔を決定することができます – Cla

+0

することはできません。 2つの式が必要な場合や、単に「day」を使用して7を掛ける場合は、datepartを動的に設定することはできませんが、実際の必要性を示す場合は、より多くの選択肢がある可能性があります。 –

答えて

3

私は比較の順序を逆に考える:

WHERE CAST(GETDATE() AS DATE) = CASE 
           WHEN rs.FreqRange = 'Weekly' THEN DATEADD(Week, rs.Frequency, rs.lastcreated) 
           WHEN rs.FreqRange = 'Monthly' THEN DATEADD(Month, rs.Frequency, rs.lastcreated) 
           ELSE '1/1/1900' -- Adjust this as needed 
           END 
+1

Andriyが基本的に同じことを前に投稿したときに私がなぜ私を受け入れたのか分かりませんが、ありがとう。 – JNK

+0

'GETDATE()をちょうど日付に変換する式があなたの答えをより完全にすると思います。いずれにせよ、私はあなたの取り決めにも同意します。 :) –

+0

@Andriy - 私はバランスのためにちょうどあなたを+1しました:) – JNK

5

DATEADD関数の間隔を設定するために、結果を使用したいが、おそらく

のようなものであるべき
… 
WHERE 
    CASE 
    WHEN rs.FreqRange = 'Weekly' THEN DATEADD(WEEK, rs.Frequency, rs.LastCreated) 
    WHEN rs.FreqRange = 'Monthly' THEN DATEADD(MONTH, rs.Frequency, rs.LastCreated) 
    END = today 
関連する問題