2013-06-03 35 views
3

我想知道是否可以在WHERE子句中更改运算符的情况下执行case语句。CASE WHERE更改运算符 - TSQL

我想要做的是过滤出基于布尔值的结果。

SELECT * 
FROM table1 
WHERE 
     CASE @Status 
      WHEN 1 THEN Name LIKE 'SOMETHING%' 
      WHEN 2 THEN Name NOT LIKE 'SOMETHING%' 
     END 

我想知道这是否可能?

+1

可能重复的[使用CASE for WHERE field IN](http://stackoverflow.com/questions/14114815/using-case-for-where-field-in) –

回答

13

你可以不用一个SWITCH表达式,像这样:

SELECT * 
FROM table1 
WHERE 
    (@Status = 1 AND Name LIKE 'SOMETHING%') 
OR (@Status = 2 AND Name NOT LIKE 'SOMETHING%') 

由于@Status可一次等于只有一件事,在OR表达的一个组成部分,将决定WHERE的结果条件。

+0

令人惊叹,如此简单,为什么我想不到那! –

+0

逻辑位,我以前用过很多次,但逻辑很清楚。 –