我似乎无法弄清楚为了实现以下目的而需要编写的代码。如果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
答案 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)
因此,如果您仅在工作日运行此脚本,则在星期一它将删除几天。