转自:https://www.yiibai.com/mysql/isnull-function.html
MySQL ISNULL函数简介
ISNULL
函数接受一个参数,并测试该参数是否为NULL。如果参数为NULL
,则ISNULL
函数返回1
,否则返回0
。
下面说明了ISNULL
函数的语法:
ISNULL(expr)
请考虑以下示例:
SELECT ISNULL(NULL); -- 1
SELECT ISNULL(1); -- 0
SELECT ISNULL(1 + NULL); -- 1;
SELECT ISNULL(1 / 0 ); -- 1;
请注意,如果您尝试找到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);
请注意,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
);
其次,将一些数据插入到special_isnull
表中:
INSERT INTO special_isnull(start_date)
VALUES('2000-01-01'),('0000-00-00'),(NULL);
注意:MySQL 5.7 中不允许插入
0000-00-00
值
第三步,使用ISNULL
函数从special_isnull
表查询数据:
SELECT
*
FROM
special_isnull
WHERE
ISNULL(start_date);
执行上面查询语句,得到以下结果 -
+------------+
| start_date |
+------------+
| NULL |
+------------+
1 row in set
查询返回一行,而您可能希望返回一个空结果集。
当您要取消IS NULL
运算符时,可以使用NOT
运算符,即IS NOT NULL
。 但是,对于ISNULL
函数,可以使用!ISNULL
。
在本教程中,您已经学习了如何使用MySQL ISNULL
函数及其特殊行为来处理NULL
值。