在 SQL Case 中检查 NULL 的正确做法是什么?
1)使用 ISNULL()
WHEN (ISNULL(TABLE.COLUMN,0) > 0) THEN ....
2)使用 IS NULL
WHEN TABLE.COLUMN IS NOT NULL THEN ....
在 SQL Case 中检查 NULL 的正确做法是什么?
1)使用 ISNULL()
WHEN (ISNULL(TABLE.COLUMN,0) > 0) THEN ....
2)使用 IS NULL
WHEN TABLE.COLUMN IS NOT NULL THEN ....
如果您想在 SQL 案例中检查空值,第二个是正确的..
如果您正在检查任何条件,则始终使用“is null”,如果将任何值替换为不同的值,则使用 isnull(a,b)。检查以下 - http://msdn.microsoft.com/en-us/library/ms184325.aspx
特意看最后一行!!!
这也是另一种检查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
如果列中的值大于 0 或为空,则两者都是正确的。如果您想了解 SQL Server 中空值的奇怪行为,可以参考这篇文章。
当您检查列是否为空时,最好使用 col IS NULL
使用 ISNULL(TABLE.COLUMN,0) > 0)
函数时,必须将空值转换为零拳头,然后应取所有大于零的值
此功能在其他场合很有用。假设我想返回所有空值以及负值。
所以查询将是
select * from table where col is null or col<0
这可以重写为
select * from table isnull(col,-1)<0
两者都是正确的,但是当您想在计算 SUM、平均值等时在该列中使用常量值而不是 NULL 时,ISNULL 会很有帮助。
例如,您可以检查:http://www.w3schools.com/ sql/sql_isnull.asp
由于这个特性,我个人使用 ISNULL/COALESCE 进行计算。