MySQL ISNULL函数简介

​ISNULL​​函数接受一个参数,并测试该参数是否为​​NULL​​。如果参数为​​NULL​​,则​​ISNULL​​函数返回​​1​​,否则返回​​0​​。

下面说明了​​ISNULL​​函数的语法:

ISNULL(expr)



SQL


请考虑以下示例:

SELECT ISNULL(NULL); -- 1    
SELECT ISNULL(1); -- 0
SELECT ISNULL(1 + NULL); -- 1;
SELECT ISNULL(1 / 0 ); -- 1;



SQL


请注意,如果您尝试找到Microsoft SQL Server的​​ISNULL​​函数的MySQL替代方法,则应该使用MySQL的​​IFNULL​​函数。 因为​​ISNULL​​函数在MySQL中与Microsoft SQL Server的​​ISNULL​​函数是不同的。

MySQL ISNULL函数和IS NULL运算符

​ISNULL​​函数与​​IS NULL​​运算符共享一些行为。 例如,如果您将​​DATE​​类型的列声明为​​NOT NULL​​,则可以使用以下语句查找特殊日期​​“0000-00-00”​​:

SELECT 
*
FROM
table_name
WHERE
ISNULL(date);



SQL


请注意,MySQL故意实现此函数来支持ODBC应用程序,因为ODBC不支持特殊日期值​​'0000-00-00'​​。或者修改以下值为: ​​sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION​​,官方手册参考: ​​https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html​

我们来看下面的一个例子。

首先,创建一个名为​​special_isnull​​的新表,如下所示:

USE testdb;
drop table if exists special_isnull;
CREATE TABLE special_isnull (
start_date DATE default NULL
);



SQL


其次,将一些数据插入到​​special_isnull​​表中:

INSERT INTO special_isnull(start_date) 
VALUES('2000-01-01'),('0000-00-00'),(NULL);



SQL


注意:MySQL 5.7 中不允许插入 ​​0000-00-00​​ 值

第三步,使用​​ISNULL​​函数从​​special_isnull​​表查询数据:

SELECT 
*
FROM
special_isnull
WHERE
ISNULL(start_date);



SQL


执行上面查询语句,得到以下结果 -

+------------+
| start_date |
+------------+
| NULL |
+------------+
1 row in set



SQL


查询返回一行,而您可能希望返回一个空结果集。

当您要取消​​IS NULL​​运算符时,可以使用​​NOT​​运算符,即​​IS NOT NULL​​。 但是,对于​​ISNULL​​函数,可以使用​​!ISNULL​​。

在本教程中,您已经学习了如何使用MySQL ​​ISNULL​​函数及其特殊行为来处理​​NULL​​值。

//商业转载请联系作者获得授权,