ifnull(expr1,expr2):如果expr1不为null则返回expr1,否则返回expr2
isnull(expr):判断expr是否为空,空返回1,否则返回0
nullif(expr1,expr2):如果expr1=expr2,返回null,否则返回expr1,
这等同于case when expr1=expr2 then null else expr1 end
mysql> select ifnull(1,2),ifnull(null,1);
+-------------+----------------+
| ifnull(1,2) | ifnull(null,1) |
+-------------+----------------+
| 1 | 1 |
+-------------+----------------+
1 row in set (0.01 sec)
mysql> select isnull(null),isnull(1),isnull(1/0);
+--------------+-----------+-------------+
| isnull(null) | isnull(1) | isnull(1/0) |
+--------------+-----------+-------------+
| 1 | 0 | 1 |
+--------------+-----------+-------------+
1 row in set, 1 warning (0.00 sec)
mysql> select nullif(null,null),nullif(null,1),nullif(1,null),null(1,1),null(1,2)
-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(1,1),null(1,2)' at line 1
mysql> select nullif(null,null),nullif(null,1),nullif(1,null),nullif(1,1),nullif(1,2);
+-------------------+----------------+----------------+-------------+-------------+
| nullif(null,null) | nullif(null,1) | nullif(1,null) | nullif(1,1) | nullif(1,2) |
+-------------------+----------------+----------------+-------------+-------------+
| NULL | NULL | 1 | NULL | 1 |
+-------------------+----------------+----------------+-------------+-------------+
1 row in set (0.00 sec)
ORACLE:
NVL(expr1,expr2):等同于mysql的IFNULL。
NVL2(expr1,expr2, expr3):如果expr1不为NULL,返回expr2; expr1为NULL,返回expr3。
expr2和expr3类型不同的话,expr3会转换为expr2的类型,转换不了,则报错
NULLIF(expr1,expr2):如果expr1=expr2,返回null,否则返回expr1,
这等同于case when expr1=expr2 then null else expr1 end
不过要注意:NULLIF中第一个参数不能是null,否则类型不一致错
COALESCE(expr1, expr2, expr3….. exprn)
返回表达式中第一个非空表达式,如果都为空则返回空值
不再举例
SQL Server:
ISNULL(expr1,expr2):等同于mysql的ifnull和oracle的NVL,如果expr1不为null则返回expr1,否则返回expr2
NULLIF(expr1,expr2):等同于oracle的NULLIF
COALESCE(expr1, expr2, expr3….. exprn):等同于oracle的
IIF(boolean_expression,true_value,false_value):如果第一个布尔表达式为true则返回true_value,否则返回false_value