LIKE的SQL CASE语句(MSG 156)

时间:2016-10-20 21:24:17

标签: sql-server tsql

这段代码在WHERE子句中:

AND
  C = CASE
    WHEN @Variable = 'NA' THEN C
    ELSE LIKE '%' + @Variable + '%'
  END

这就是我想要的:如果@Variable是'NA'(如不适用),那么给我所有结果。如果没有,我只想要像@Variable那样的C.

错误就是这样。如果我从C = CASE中删除=,则LIKE没有更多错误,但错误是CASE。我该怎么办?

3 个答案:

答案 0 :(得分:2)

这可以在一个简单的WHERE中完成,如下所示:

SELECT * FROM MyTable
WHERE (@Variable = 'OK') OR (C LIKE '%' + @Variable + '%')

答案 1 :(得分:1)

这种语法永远不会奏效,为什么要这么复杂?

WHERE (@var = 'ok') OR (c like '%' + @var + '%')

答案 2 :(得分:0)

最终你想要的是OR。我建议使用其他答案给出的方法,但确实可以使用CASE修复语法问题。

AND
  'Keep' = CASE
    WHEN @Variable = 'NA' THEN 'Keep'
    WHEN C LIKE '%' + @Variable + '%' THEN 'Keep'
    ELSE 'Discard'
  END

我还试图强调,所比较的值并不重要,ELSE是绝对必要的。