我正在尝试将CASE WHEN
添加到以下工作语句中:
Select ...
From...
Where
d.name like @filter and d.flags & 0x0F <> 0
我有一种情况,如果用户将BIT @showHidden
参数设置为true,我希望过滤。这就是我的尝试:
SELECT...
FROM...
WHERE
d.name like
CASE WHEN @showHidden = 'true' THEN
@filter
ELSE
@filter and d.flags & 0x0F <> 0
我收到错误:
&#39;和&#39;附近的语法不正确。
是否可以在AND
范围内拥有CASE WHEN
答案 0 :(得分:5)
尝试:
SELECT...
FROM...
WHERE d.name like @filter
and ( @showHidden = 'true' -- show everything
OR
d.flags & 0x0F <> 0 -- check if name should be hidden
)
答案 1 :(得分:4)
使用CASE
END
语句
SELECT...
FROM...
WHERE
d.name like
CASE WHEN @showHidden = 'true' THEN
@filter
ELSE
@filter
END and d.flags
如果您想在WHEN中添加标准,那么正确的方法是:
SELECT...
FROM...
WHERE
d.name like
CASE WHEN @showHidden = 'true' and d.flags THEN
@filter
ELSE
@filter
END
您可能有许多案件:
SELECT...
FROM...
WHERE
d.name like
CASE
WHEN Condition1 AND Condition2 THEN
@filter1
WHEN Condition3 AND Condition4 THEN
@filter2
WHEN Condition5 THEN
@filter3
ELSE
@filter4
END
ELSE
用于确保在没有条件的情况下获得值。
<强>更新强>
在我的回答中,我试图提供有关CASE如何工作的一些信息,但并未真正回答整个问题。
如果您想要一个如何在此使用CASE
的示例,并且您希望@filter仅在@showHidden为true时才能工作:
d.name like
CASE
WHEN @showHidden = 'true' THEN @filter
ELSE d.name
END
因此,如果@showHidden
那么d.name
必须与@filter
一样,那么它必须像d.name
(始终为真)。