Sql 如何创建条件WHERE子句?
我需要有一个条件where条款,其作用如下:Sql 如何创建条件WHERE子句?,sql,sql-server-2005,where-clause,Sql,Sql Server 2005,Where Clause,我需要有一个条件where条款,其作用如下: Select * From Table If (@booleanResult) Begin Where Column1 = 'value1' End Else Begin Where column1 = 'value1' and column2 = 'value2' End 任何帮助都将不胜感激 你能做一下吗 SELECT * FROM Table WHERE (@booleanResult = 1 AND
Select *
From Table
If (@booleanResult)
Begin
Where Column1 = 'value1'
End
Else
Begin
Where column1 = 'value1' and column2 = 'value2'
End
任何帮助都将不胜感激 你能做一下吗
SELECT
*
FROM
Table
WHERE
(@booleanResult = 1
AND Column1 = 'value1')
OR
(@booleanResult = 0
AND Column1 = 'value1'
AND Column2 = 'value2')
您可以在
WHERE
子句中轻松地对条件进行分组:
WHERE
(@BooleanResult=1 AND Column1 = 'value1')
OR
(@BooleanResult=0 AND Column1 = 'value1' AND column2 = 'value2')
要提供一个简短的答案:
Select *
From Table
Where Column1 = 'value1' and
coalesce(column2, '') = (case when @BooleanResults = 0
then 'value1'
else coalesce( column2, '')
end)
根据所讨论的脚本,无论变量
@booleansult
设置为true还是false,似乎都需要Column1
的条件。因此,我已将该条件添加到WHERE
子句中,并在剩余条件中检查变量是否设置为1(true)或如果设置为0(false),则它还将检查列2
上的条件
这只是实现这一目标的又一种方式
创建和插入脚本:
位变量设置为1(真)时的脚本:
输出:
位变量设置为0(false)时的脚本:
输出:
演示:
你只是在编语法吗?这对什么是有效的RDBMS?哎呀,我留下了一些无关的字符。其余的语法是标准SQL,应该被任何接受以“@”开头的局部变量的数据库所理解。答案较短,但代码不是。然而,+1是为了避免短路,这对于更多的SQL风格很有用。这不会在我的结果中给出OR的两个方面吗?我回到这里并更改了接受的答案。回顾过去,我想要的并不是我在问题中真正表达的东西。湿婆回答了更多我想要的,但你准确地回答了我的问题。对此很抱歉-这是公平的做法。请记住,短路并不总是像SQL中所期望的那样有效。由db供应商决定如何计算表达式。谢谢@diaho,因为这帮助我现在有了一个条件,允许计算ID=1或(1,2,3,4)中的ID,这取决于用户是否将任何内容传递到存储过程:)。这不会给我结果的两个方面吗?@Yatrix是的,会的。但是你永远不会同时匹配这两个,因为你正在检查
@booleansult
,它不能同时是1
和0
。这正是我需要的。谢谢,湿婆。我只是觉得你的例子最完整,对我个人来说也是最有帮助的。全体投票,但只能有一个(被接受)!我改变了我接受的答案。你给我的正是我想要的,但公平地说,正如你所说,他们给我的正是我想要的。我只是没有问最好的问题。在这一点上,我不能确切地记得我真正想要的问题是什么
CREATE TABLE MyTable
(
Column1 VARCHAR(20) NOT NULL
, Column2 VARCHAR(20) NOT NULL
);
INSERT INTO MyTable (Column1, Column2) VALUES
('value1', ''),
('', 'value2'),
('value1', 'value2');
DECLARE @booleanResult BIT
SET @booleanResult = 1
SELECT *
FROM MyTable
WHERE Column1 = 'value1'
AND ( @booleanResult = 1
OR (@booleanResult = 0 AND Column2 = 'value2')
);
COLUMN1 COLUMN2
------- -------
value1
value1 value2
DECLARE @booleanResult BIT
SET @booleanResult = 0
SELECT *
FROM MyTable
WHERE Column1 = 'value1'
AND ( @booleanResult = 1
OR (@booleanResult = 0 AND Column2 = 'value2')
);
COLUMN1 COLUMN2
------- -------
value1 value2