2011-09-12 62 views
1

根據頻率範圍(nvarchar的),它可以是「每週」或「每月」,我想用結果來設定DATEADD函數的間隔SQL Server Dateadd - 在select查詢中從if if中獲取間隔?

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()'返回當前時間縮短至約3毫秒的精度所以即使工作是不可能的成爲你需要的東西。 –

+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

應該可能是這樣的

… 
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