我想检查布尔值是否为真,然后在WHERE子句中决定使用什么条件。
假设布尔变量是@checkbool:
SELECT *
FROM TableA A
WHERE
--if @checkbool is true, run this
A.Id = 123
--if @checkbool is false, run this
A.Id <> 123
有没有办法否定一个条件?就像在C ++中一样,你可以做到!(条件)。
如果没有,解决这个问题的最佳方法是什么?
谢谢!
答案 0 :(得分:5)
C中等效于!
的SQL是NOT
。但是,在您的情况下,您还需要其他内容:您需要构建一个条件,根据@checkbool
的值决定两个选项,如下所示:
SELECT *
FROM TableA A
WHERE ( (@checkbool) AND (A.Id = 123))
OR ((NOT @checkbool) AND (A.Id <> 123))
答案 1 :(得分:2)
select *
from TableA A
where
(@checkbool = 1 and A.Id = 123) or
(@checkbool = 0 and A.Id <> 123)
答案 2 :(得分:2)
这是一个解决方案:
IF @Checkbool = 1
SELECT * FROM Table A WHERE A.Id = 123
ELSE
SELECT * FROM Table A WHERE A.Id <> 123
这是另一个仅使用WHERE子句:
SELECT *
FROM Table A
WHERE
(@Checkbool = 1 AND A.Id = 123)
OR
(@Checkbool = 0 AND A.Id <> 123)
你在where子句中放入的所有东西都需要以表达式的形式存在。因此,这种情况下的解决方案是以表达式的形式写出条件。
希望这会有所帮助。 :)
答案 3 :(得分:1)
如果checkbool是一个coumn,那么这样的事情就行了。(没有正确的SQL语法)
WHERE (A.ID=123 AND A.checkbool=TRUE) OR (A.ID!=123 AND A.checkbool=TRUE)
如果checkbool不是cloumn,请将checkcheol的值替换为A.checkbool。
这是正确的SQL
WHERE ((checkbool) AND (A.Id = 123))OR ((NOT checkbool) AND (A.Id <> 123))
答案 4 :(得分:0)
您可以使用IN clausule甚至是!=运算符,例如:
A.Id NOT IN (123,x,y,z);
或
A.Id != 123;