2016-07-14 23 views
0

我的一般形式使用CASE语句不明白为什么括号必须在case语句中使用

CASE 
WHEN A is NULL or B is NULL 
THEN 

然而,一个同事告诉我,这是不正确的,我应该使用括号,如

CASE 
WHEN (A is NULL or B is NULL) 
THEN 

我不太确定为什么第一种方法不正确?这只是一个表现问题吗?

+5

它只是更具可读性,结果是一样的。 – potashin

+2

让你的同事向你解释为什么他们认为这是不正确的。 – Nicarus

+0

也许同事说OR和AND。 – NEER

回答

0

第一种方法不是不正确,用于组合逻辑和顺序优先。例如,运行这个:

create table #temp (a int, b int) 
insert into #temp (a, b) values 
(1,1), 
(2,null), 
(null,3) 

select 
    case when a is null or b is null then 'one is null' 
    else 'neither is null' 
    end as stmt 
from #temp 
0

它们在这种情况下完全相同。潘打算...

你的同事可能指的是ORAND的处理。 SQL Server自然赋予AND优先于OR,因此需要括号来表示所需的优先级。

例如:

SELECT * FROM MyTable WHERE Col = A AND Col2 = B OR Col3 = C 

是这样执行的,不带括号:

SELECT * FROM MyTable WHERE (Col = A AND Col2 = B) OR Col3 = C 

所以,如果你真的想Col = A两个,那么Col2 = B OR Col3 = C需要括号:

SELECT * FROM MyTable WHERE Col = A AND (Col2 = B OR Col3 = C) 
相关问题