Gordon Linoff指出,如果某些值爲null
,那麼您的代碼將無法正常工作,除此之外您應該看到預期的結果。
請記住,null = 'A'
是null
而不是false
。 ergo not(null = 'A')
也是null
。
create table t (col1 char(1), col2 char(1), col3 char(1));
insert into t values
('A','A','A')
,('A','B','C')
,('A','B',null)
,(null,null,null)
,('Z','Z',null)
,('Z','Z','Z');
select *,
iif ( (col1 = 'A' or col2 = 'B' or col3 = 'C'), 'true', 'false') as test1,
iif (not(col1 = 'A' or col2 = 'B' or col3 = 'C'), 'true', 'false') as test2
from t;
rextester演示:http://rextester.com/CRYH34782
回報:
+------+------+------+-------+-------+
| col1 | col2 | col3 | test1 | test2 |
+------+------+------+-------+-------+
| A | A | A | true | false |
| A | B | C | true | false |
| A | B | NULL | true | false |
| NULL | NULL | NULL | false | false |
| Z | Z | NULL | false | false |
| Z | Z | Z | false | true |
+------+------+------+-------+-------+
你可以換你列isnull()
或coalesces()
爲null
提供替代值。
你的第二隻吐出TRUE;當'col1'不等於'A'和'col2'不等於'B'和'COL3 '不等於'C'。嘗試將它們的值全部設置爲'D'並運行。本質上,如果在NOT()中的任何一個測試返回TRUE,則NOT()將把TRUE改爲FALSE。所以他們必須都是'FALSE'來返回一個'TRUE'。 – JNevill