MySQL NULLIF
简介:在本教程中,您将了解MySQL NULLIF函数以及如何使用它来防止查询中的零除错误。
MySQL NULLIF函数简介
NULLIF函数是接受2个参数的控制流函数之一。
如果第一个参数等于第二个参数,则NULLIF函数将返回NULL,否则它将返回第一个参数。
NULLIF函数的语法如下:
NULLIF(expression_1,expression_2);
如果expression_1 = expression_2为true,则NULLIF函数返回NULL,否则返回expression_1
请注意,NULLIF函数类似于使用CASE表达式的以下表达式:
CASE WHEN expression_1 = expression_2 THEN NULL ELSE expression_1 END;
请注意,请勿将NULLIF函数与称为IFNULL函数的类似函数混淆。
MySQL NULLIF示例
让我们看一些使用NULLIF函数了解其工作原理的示例。
SELECT NULLIF(1,1); -- return NULL
SELECT NULLIF(1,2); -- return 1
SELECT NULLIF('MySQL NULLIF','MySQL NULLIF'); -- return NULL
SELECT NULLIF('MySQL NULLIF','MySQL IFNULL'); -- return MySQL NULLIF
SELECT NULLIF(1,NULL); -- return 1 because 1 <=> NULL
SELECT NULLIF(NULL,1); -- return NULL the first argument
语句如何工作。
NULIF(1,1)返回NULL,因为1等于1。
NULLIF(1,2)返回1,这是第一个参数,因为1不等于2。
NULLIF('MySQL NULLIF','MySQL NULLIF')返回NULL,因为两个参数是相同的字符串
NULLIF('MySQL NULLIF','MySQL NULLIF')返回MySQL NULLIF,因为两个字符串不相等。
NULLIF(1,NULL)返回1,因为1不等于NULL
NULLIF(NULL,1)返回第一个参数,即NULL,因为NULL不等于1。
使用NULLIF函数防止除零错误
我们经常使用NULLIF函数来防止查询中被零除的错误。
如果MySQL服务器启用了ERROR_FOR_DIVISION_BY_ZERO模式,则当被零除时,它将发出一个错误。
请参阅以下语句:
SELECT 1/0; -- cause error
在这种情况下,可以使用NULLIF函数来防止被零除,如下所示:
SELECT 1/NULLIF(0,0); -- return NULL
因为零等于零,所以表达式NULLIF(0,0)返回NULL。
结果,该语句返回NULL。
让我们看一下示例数据库中的订单表。
首先,要获取在2003年6月创建的所有订单,请使用以下查询:
SELECT orderNumber, orderdate, requiredDate, shippedDate, status FROM orders WHERE orderDate BETWEEN '2003-06-01' AND '2003-06-30';
其次,使用SUM和IF函数计算2003年6月的发货订单数/取消订单数。
SELECT SUM(IF(status = 'Shipped',1,0)) / SUM(IF(status = 'Cancelled',1,0)) FROM orders WHERE orderDate BETWEEN '2003-06-01' and '2003-06-30';
MySQL发出错误,因为在2003年6月没有创建取消的订单。
这意味着表达式SUM(IF(status ='Cancelled',1,0))返回零。
第三,为防止被零除错误,可以将NULLIF函数用作以下查询:
SELECT SUM(IF(status = 'Shipped', 1, 0)) / NULLIF(SUM(IF(status = 'Cancelled', 1, 0)), 0) FROM orders WHERE orderDate BETWEEN '2003-06-01' AND '2003-06-30';
因为没有在2003年6月创建取消订单,所以SUM(IF(status ='Cancelled',1,0)表达式返回零,这也使NULLIF(SUM(IF(status ='Cancelled',1,0)) ,0)表达式返回NULL值。
在本教程中,我们向您介绍了NULLIF函数,该函数在某些情况下非常方便,例如防止查询中的零错误除法。