ДЕЛО КОГДА - Что я делаю не так? - PullRequest
2 голосов
/ 22 декабря 2011

У меня есть следующее (что, я знаю, синтаксически неверно, возможно, даже смешно):

and lp.lease_current_stop_date
    case when @lease_expiry_period = 01
    then
        between dateadd(MONTH, +1,
                       getdate())
    else
        between dateadd(MONTH, +2,
                       getdate())

Мне просто интересно, как лучше всего это сделать?Я пытаюсь сделать следующее:

* Когда @lease_expiry_period равно 01, тогда показать все договоры аренды, срок действия которых истекает через месяц.Когда @lease_expiry_period равен 02, тогда показываются все договоры аренды, срок действия которых истекает до двух месяцев. *

Примечание по производительности

Стоит отметить, что я не урезал датув моем примере также для простоты.Поскольку это использует месяц, getdate () должен быть:

Dateadd(d,0,datediff(d,0,getdate())) 

Для лучшей производительности.

Ответы [ 3 ]

6 голосов
/ 22 декабря 2011
AND lp.lease_current_stop_date BETWEEN getdate() AND dateadd(MONTH, @lease_expiry_period, getdate())
1 голос
/ 22 декабря 2011
...
AND 'T' = CASE WHEN @lease_expiry_period IN (01, 02) THEN
             CASE WHEN lp.lease_current_stop_date 
                         BETWEEN getdate() 
                         AND dateadd(MONTH, @lease_expiry_period, getdate())                            
                  THEN 'T'
             END
          END
AND ...
1 голос
/ 22 декабря 2011

Как насчет следующего

    select * 
    from [table] lp
    where  lp.lease_current_stop_date= (
    select case 
        when @lease_expiry_period = 01
        then
            dateadd(MONTH, +1, getdate())
        else
            dateadd(MONTH, +2,getdate())
        end)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...