2012-09-23 62 views
3

我想用持有比较运营商如'=''>''>='一个参数,并在使用它在那里用“的情况下,当再”或if语句声明类似如下:传递比较运营商WHERE子句

WHERE 
case @Operator 
when '=' then (@Amount is null) or (@Amount = 0) or (Amount= @Amount) 
when '>' then (@Amount is null) or (@Amount = 0) or (Amount> @Amount) 
when '>=' then (@Amount is null) or (@Amount = 0) or (Amount>= @Amount)  
END 

回答

1

我相信这会做的伎俩:

WHERE 
    @Amount IS NULL 
    OR @Amount = 0 
    OR Amount = CASE @Operator WHEN '=' THEN @Amount END 
    OR Amount > CASE @Operator WHEN '>' THEN @Amount END 
    OR Amount >= CASE @Operator WHEN '>=' THEN @Amount END; 
+0

感谢。但我想知道是否可以为运算符['BETWEEN'] [@Amount]和[@ Amount2] – user1692483

+0

再添加一个案例谢谢我自己做了WHERE 或者[@Amount]和CASE [@Operator]之间的金额WHEN'在'THEN [@ Amount2] END – user1692483

+0

@ user1692483之间是金额列INT? –

0
where isnull(@Amount, 0) = 0 
    or (Amount = @Amount and @Operator = '=') 
    or (Amount > @Amount and @Operator = '>') 
    or (Amount >= @Amount and @Operator = '>=')