2012-07-23 65 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进行计算。