在 CASE WHEN 中使用 AND
Using AND within a CASE WHEN
我正在尝试将 CASE WHEN
添加到以下 working 语句:
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
我收到错误:
Incorrect syntax near 'and'.
是否可以在 CASE WHEN
中包含 AND
?
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 为真时才起作用,那么:
d.name like
CASE
WHEN @showHidden = 'true' THEN @filter
ELSE d.name
END
因此,如果 @showHidden
,则 d.name
必须类似于 @filter
,否则它必须类似于 d.name
(始终为真)。
尝试:
SELECT...
FROM...
WHERE d.name like @filter
and ( @showHidden = 'true' -- show everything
OR
d.flags & 0x0F <> 0 -- check if name should be hidden
)
我正在尝试将 CASE WHEN
添加到以下 working 语句:
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
我收到错误:
Incorrect syntax near 'and'.
是否可以在 CASE WHEN
中包含 AND
?
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 为真时才起作用,那么:
d.name like
CASE
WHEN @showHidden = 'true' THEN @filter
ELSE d.name
END
因此,如果 @showHidden
,则 d.name
必须类似于 @filter
,否则它必须类似于 d.name
(始终为真)。
尝试:
SELECT...
FROM...
WHERE d.name like @filter
and ( @showHidden = 'true' -- show everything
OR
d.flags & 0x0F <> 0 -- check if name should be hidden
)