苏州嘉盛建设工程有限公司网站,手机网站显示建设中,php能做手机网站吗,怎样在各大网站做有效的宣传转载自 MySQL nullif()函数
MySQL NULLIF函数简介
NULLIF函数是接受2个参数的控制流函数之一。如果第一个参数等于第二个参数#xff0c;则NULLIF函数返回NULL#xff0c;否则返回第一个参数。
NULLIF函数的语法如下#xff1a;
NULLIF(expression_1,expression_2);如…转载自 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_2THEN NULL
ELSEexpression_1
END;请注意不要将NULLIF函数与IFNULL函数混淆。 MySQL NULLIF示例
我们来看一下使用NULLIF函数来了解它的工作原理的一些例子。
示例-1
mysql SELECT NULLIF(1,1);
-------------
| NULLIF(1,1) |
-------------
| NULL |
-------------
1 row in set示例-2
mysql SELECT NULLIF(1,2);
-------------
| NULLIF(1,2) |
-------------
| 1 |
-------------
1 row in set示例-3
mysql SELECT NULLIF(MySQL NULLIF,MySQL NULLIF);
---------------------------------------
| NULLIF(MySQL NULLIF,MySQL NULLIF) |
---------------------------------------
| NULL |
---------------------------------------
1 row in set示例-4
mysql SELECT NULLIF(MySQL NULLIF,MySQL IFNULL);
---------------------------------------
| NULLIF(MySQL NULLIF,MySQL IFNULL) |
---------------------------------------
| MySQL NULLIF |
---------------------------------------
1 row in set示例-6
mysql SELECT NULLIF(1,NULL);
----------------
| NULLIF(1,NULL) |
----------------
| 1 |
----------------
1 row in set示例-7
mysql SELECT NULLIF(NULL,1);
----------------
| NULLIF(NULL,1) |
----------------
| NULL |
----------------
1 row in set上面示例中的语句是如何工作的
NULIF(1,1)返回NULL因为1等于1。NULLIF(1,2)返回1这是第一个参数因为1不等于2。NULLIF(MySQL NULLIFMySQL NULLIF)返回NULL因为两个参数是相同的字符串。NULLIF(MySQL NULLIFMySQL NULLIF)返回MySQL NULLIF因为两个字符串不相等。NULLIF(1NULL)返回1因为1不等于NULL。NULLIF(NULL1)返回第一个参数即NULL因为NULL不等于1。
使用NULLIF函数来防止除零错误
我们经常使用NULLIF函数来阻止在查询中除以零错误。如果MySQL服务器启用了ERROR_FOR_DIVISION_BY_ZERO模式则当发生零除数时将发出错误。
见下列查询语句
SELECT 1/0; -- cause error上面语句得到以下结果 -
mysql SELECT 1/0;
------
| 1/0 |
------
| NULL |
------
1 row in set在这种情况下您可以使用NULLIF函数来阻止除以零如下所示
SELECT 1/NULLIF(0,0); -- return NULL因为0等于0所以NULLIF(0,0)表达式返回NULL。结果语句返回NULL。
我们来看看示例数据库(yiibaidb)中的orders表其结构如下所示 -
mysql desc orders;
--------------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
--------------------------------------------------------
| orderNumber | int(11) | NO | PRI | NULL | |
| orderDate | date | NO | | NULL | |
| requiredDate | date | NO | | NULL | |
| shippedDate | date | YES | | NULL | |
| status | varchar(15) | NO | | NULL | |
| comments | text | YES | | NULL | |
| customerNumber | int(11) | NO | MUL | NULL | |
--------------------------------------------------------
7 rows in set首先要获取2013年6月创建的所有订单请使用以下查询
SELECT orderNumber, orderdate, requiredDate, shippedDate, status
FROMorders
WHEREorderDate BETWEEN 2013-06-01 AND 2013-06-30;执行上面查询语句得到以下结果 -
-------------------------------------------------------------
| orderNumber | orderdate | requiredDate | shippedDate | status |
-------------------------------------------------------------
| 10127 | 2013-06-03 | 2013-06-09 | 2013-06-06 | Shipped |
| 10128 | 2013-06-06 | 2013-06-12 | 2013-06-11 | Shipped |
| 10129 | 2013-06-12 | 2013-06-18 | 2013-06-14 | Shipped |
| 10130 | 2013-06-16 | 2013-06-24 | 2013-06-21 | Shipped |
| 10131 | 2013-06-16 | 2013-06-25 | 2013-06-21 | Shipped |
| 10132 | 2013-06-25 | 2013-07-01 | 2013-06-28 | Shipped |
| 10133 | 2013-06-27 | 2013-07-04 | 2013-07-03 | Shipped |
-------------------------------------------------------------
7 rows in set第二计算2013年6月发货订单数量/取消订单数量可使用SUM和IF函数。
SELECT SUM(IF(status Shipped,1,0)) / SUM(IF(status Cancelled,1,0))
FROM orders
WHERE orderDate BETWEEN 2013-06-01 and 2013-06-30;执行上面查询语句得到以下结果 -
------------------------------------------------------------------------
| SUM(IF(status Shipped,1,0)) /SUM(IF(status Cancelled,1,0)) |
------------------------------------------------------------------------
| NULL |
------------------------------------------------------------------------
1 row in setMySQL发出错误因为在2013年6月没有创建取消订单。 这意味着表达式SUM(IF(status Cancelled1,0))返回0。
第三为了防止除0错误您可以使用NULLIF函数如下查询
SELECT SUM(IF(status Shipped, 1, 0)) /NULLIF(SUM(IF(status Cancelled, 1, 0)), 0)
FROMorders
WHEREorderDate BETWEEN 2013-06-01 AND 2013-06-30;执行上面查询语句得到以下结果 -
-------------------------------------------------------------------------
| SUM(IF(status Shipped, 1, 0)) /NULLIF(SUM(IF(status Cancelled, 1, 0)), 0) |
-------------------------------------------------------------------------
| NULL |
-------------------------------------------------------------------------
1 row in set因为2013年6月没有创建取消订单所以SUM(IF(status Cancelled1,0))返回0这也使得NULLIF(SUM(IF(status Cancelled1,0) 0)表达式返回NULL值。
在本教程中我们向您介绍了NULLIF函数这在某些情况下非常方便例如阻止查询中的零错误