T-SQL案例逻辑

时间:2012-01-24 21:49:58

标签: sql sql-server-2008 tsql

我似乎无法弄清楚为了实现以下目的而需要编写的代码。如果GETDATE()是星期一而不是我想要删除所有一年的数据+ 2天以上(工作将不会在周六和周日运行)。我试图让以下代码工作,而不是写两次..即在较短的代码片段中实现相同的效果。任何帮助将不胜感激。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果你想要删除一年之前的所有记录,不要真的理解为什么要做一个介于两者之间的语句。不只是:

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

因此,如果您仅在工作日运行此脚本,则在星期一它将删除几天。