情况下 - 我做错了什么?

时间:2011-12-22 04:46:15

标签: sql sql-server sql-server-2008 tsql

我有以下内容(我知道这在语法上是不正确的,甚至可能是荒谬的):

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 个答案:

答案 0 :(得分:6)

AND lp.lease_current_stop_date BETWEEN getdate() AND dateadd(MONTH, @lease_expiry_period, getdate())

答案 1 :(得分:1)

以下

怎么样?
    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)

答案 2 :(得分:1)

...
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 ...