nullif
和ifnull
是数据库中常用的两个函数。不同的数据库可能会略微有差异。
NULLIF(expr1,expr2)
NULLIF
接受两个参数,如果两个参数相等则返回NULL
,不相等则返回第一个参数。
运行环境:MYSQL
--返回 NULL
SELECT NULLIF('culturesun.site','culturesun.site');
--返回 culturesun.site
SELECT NULLIF('culturesun.site',NULL);
--返回 NULL ,因为第一个参数是 NULL
SELECT NULLIF(NULL,'culturesun.site');
注意第三句sql,第一个接受参数是NULL
,在SQL server数据库中第一个参数不允许NULL
。
IFNULL(expr1,expr2)
IFNULL
接受两个参数,如果第一个参数为NULL
,则返回第二个参数,否则返回第一个参数。
运行环境:MYSQL
--返回 culturesun.site
SELECT IFNULL('culturesun.site',NULL);
--返回 culturesun.site
SELECT IFNULL(NULL,'culturesun.site');
--返回 NULL(返回的是第二个参数)
SELECT IFNULL(NULL,NULL);
注意SQL server中没有IFNULL
,而是ISNULL
。
测试表:testtable ,有个名为 id 的列,类型是varchar 数据如下:
当IFNULL
配合数据表的列使用会有意想不到结果,场景如下:
判断某列是否为NULL
,如果是就返回culturesun
,不是就返回列值拼接culturesun
字符串。
实现sql如下:
SELECT IFNULL(CONCAT(id,'culturesun'),'culturesun') FROM `testtable`;
查询结果:
可知如果IFNULL
第一个参数是一个表的列,即使是列值与字符串拼接,也依旧是判断列值是否为空。