2012-07-23 60 views
2

在SQL Case中檢查NULL的正確做法是什麼?在SQL查詢中處理NULL

1)使用ISNULL()

WHEN (ISNULL(TABLE.COLUMN,0) > 0) THEN .... 

2)使用IS NULL

WHEN TABLE.COLUMN IS NOT NULL THEN .... 
+2

可能的重複:http://stackoverflow.com/questions/3118213/isnull-vs-is-null – 2012-07-23 06:59:47

回答

1

第二個是正確的,如果你想爲您在SQL的情況下空值..

0

這也是檢查NON NULL值的另一種方法。

檢查列的長度,如果它大於1或等於1,那麼它的NON NULL 值。

declare @emp table 
(
fname varchar(50) 
); 

INSERT into @emp VALUES('vishwanath'); 
INSERT into @emp VALUES('chetan'); 
INSERT into @emp VALUES(NULL); 
INSERT into @emp VALUES(NULL); 

SELECT * FROM @emp 
where len(fname)>=1 and fname<>''; 

Gives.. 

    fname 
-------------------------------------------------- 
    vishwanath 
    chetan 
+1

INSERT INTO @emp VALUES('')' - 那麼這個呢?它不是NULL,只是空的。 – cairnz 2012-07-23 07:40:49

+0

@ cairnz編輯我的答案。 – 2012-07-23 08:43:27

0

如果列中的值大於0或null,兩者都是正確的。 如果您想了解SQL Server中空值的奇怪行爲,可以參考此post。當您使用ISNULL(TABLE.COLUMN,0) > 0)函數,空值必須轉換到零拳頭那麼應該採取所有值大於

0

,當你正在檢查一列是否爲空或不是它是更好地使用 COL IS NULL

此功能在另一種場合很有用。可以說我是否想返回所有的空值以及負值。

所以查詢將

select * from table where col is null or col<0 

這可以改寫爲

select * from table isnull(col,-1)<0 
0

兩者都是在那裏的原因是正確的,但是ISNULL可當你想使用一個恆定值是有益的而不是在該列中的NULL,同時計算SUM,平均值等。
例如,您可以檢查:http://www.w3schools.com/sql/sql_isnull.asp

由於此功能,我個人使用ISNULL/COALESCE進行計算。