SQL Case语句不起作用

时间:2014-10-17 20:49:53

标签: sql sql-server

我正在编写一个sql查询,但是它有效,但我得到的结果只有一半:

  (q1.VariableName LIKE
        CASE WHEN @Variablename IS NULL THEN ('e%')
        ELSE @Variablename
        END)

我想要的是: 如果@Variablename为NOT NULL,则q1.VariableName = @Variablename。

If it is NULL,
 then q1.VariableName like 'e%' 
 or q1.VariableName like 'b%' and q1.VARIABLENAME not LIKE '%MAIL%'

但是,我无法得到它。谁能告诉我,我哪里出错了。

3 个答案:

答案 0 :(得分:2)

您可以使用isnull()函数检查NULL。如果@VariableName为NULL,则该函数将用'e%'替换它。

WHERE q1.VariableName LIKE isnull(@VariableName, 'e%') 

如果它不是NULL,则必须等于q1.VariableName,前提是@VariableName不包含通配符。

答案 1 :(得分:1)

OR可以在where子句中使用

where (  q1.VariableName = @Variablename)
      OR ( @VariableName IS  NULL And (q1.VariableName like 'e%' 
 or q1.VariableName like 'b%' and q1.VARIABLENAME not LIKE '%MAIL%')) 

答案 2 :(得分:0)

如果您这样做是where条款,那么最好完全避免使用CASE

   ((@Variablename IS NULL
     and (q1.VariableName LIKE 'e%'
          or q1.VariableName like 'b%' 
          and q1.VARIABLENAME not LIKE '%MAIL%'))
or q1.VariableName = @Variablename)

由于null永远不等于任何内容,q1.VariableName = @Variablename) @Variablename null时,{{1}}总是会评为假。