有人能解释一下SQL中的以下行为吗?
SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)
有人能解释一下SQL中的以下行为吗?
SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)
当前回答
在SQL中,任何用NULL计算的结果都是UNKNOWN
这就是为什么SELECT * FROM MyTable WHERE MyColumn != NULL或SELECT * FROM MyTable WHERE MyColumn <> NULL给出0结果的原因。
为了检查NULL值,提供了isNull函数。
此外,您可以像在第三个查询中使用的那样使用IS操作符。
其他回答
注意,这个行为是默认的(ANSI)行为。
如果你:
SET ANSI_NULLS OFF
http://msdn.microsoft.com/en-us/library/ms188048.aspx
你会得到不同的结果。
SET ANSI_NULLS OFF显然将在未来消失…
在SQL中,任何用NULL计算的结果都是UNKNOWN
这就是为什么SELECT * FROM MyTable WHERE MyColumn != NULL或SELECT * FROM MyTable WHERE MyColumn <> NULL给出0结果的原因。
为了检查NULL值,提供了isNull函数。
此外,您可以像在第三个查询中使用的那样使用IS操作符。
NULL不能使用比较操作符与任何值进行比较。NULL = NULL为false。Null不是一个值。IS运算符是专门为处理NULL比较而设计的。
我们使用
SELECT * FROM MyTable WHERE ISNULL(MyColumn, ' ') = ' ';
返回MyColumn为NULL的所有行或MyColumn为空字符串的所有行。对于许多“最终用户”来说,NULL和空字符串问题是一个没有需要和混淆点的区别。
NULL不是任何东西…这是未知的。NULL不等于任何东西。这就是为什么在SQL查询中必须使用神奇的短语is NULL而不是= NULL
你可以参考这个:http://weblogs.sqlteam.com/markc/archive/2009/06/08/60929.aspx