Логика T-SQL Case - PullRequest
       13

Логика T-SQL Case

0 голосов
/ 25 января 2012

Кажется, я не могу понять код, который мне нужно написать, чтобы достичь следующего.Если 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 ]

2 голосов
/ 25 января 2012

Попробуйте, если я правильно понял ваш вопрос:

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 голосов
/ 25 января 2012

Не совсем понимаю, почему вы делаете промежуточный оператор, если хотите удалить все записи старше года.Разве это не просто:

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

Так что, если вы запускаете этот скрипт только в будние дни, в понедельник он удалит еще пару дней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...