2012-01-24 86 views
0

我似乎無法弄清楚我需要編寫以實現以下內容的代碼。如果GETDATE()是星期一比我想要刪除所有數據是一年還多2天(工作不會在星期六和星期日運行)。我試圖讓下面的代碼在不寫兩次的情況下工作..i.e在較短的一段代碼中實現相同的效果。任何幫助將不勝感激。T-SQL案例邏輯

DELETE FROM dbo.table 
WHERE AddedOn = CASE WHEN DATENAME(WEEKDAY,'01/23/2012') = 'Monday' then CONVERT(date,dateadd("d",-368,getdate())) else 
CONVERT(date,dateadd("d",-365,getdate())) end 

DELETE FROM dbo.table 
WHERE AddedOn = CASE WHEN DATENAME(WEEKDAY,'01/23/2012') = 'Monday' then CONVERT(date,dateadd("d",-367,getdate())) else 
CONVERT(date,dateadd("d",-365,getdate())) end 
+0

你是否考慮過閏年? – RedFilter

+0

不是。但是,如果要刪除368天前的任何內容,那麼它是否閏年並不重要。因此368應該照顧閏年。 – rvphx

+0

您是否考慮過使用不等式?如果你每天都在運行(ish),你是否想刪除所有比一歲還舊的數據?如果是這樣,只是使用不等式,併爲所有情況設置 – JNK

回答

0

真的不明白,爲什麼你的語句之間做一個,如果你想一年就刪除較早的所有記錄即可。是不是隻是:

DELETE FROM dbo.table where AddenOn < DATEADD(year, '01/23/2012', -1) 

所以,如果你在週一僅在工作日運行此腳本,它會刪除一對夫婦更天。

+0

沒想到那個..我可憐! – rvphx

2

試試這個,如果我正確地理解你的問題:

DELETE FROM dbo.table 
    WHERE AddedOn BETWEEN 
    CASE WHEN DATENAME(WEEKDAY,'01/23/2012') = 'Monday' 
     then CONVERT(date,dateadd("d",-368,getdate())) 
     else CONVERT(date,dateadd("d",-365,getdate())) 
    end 
    AND 
    CASE WHEN DATENAME(WEEKDAY,'01/23/2012') = 'Monday' 
     then CONVERT(date,dateadd("d",-367,getdate())) 
    else CONVERT(date,dateadd("d",-365,getdate())) 
     end 
+0

這就是我正在尋找的那個。謝謝Sparky。 – rvphx