日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL nullif()函数

發布時間:2023/12/3 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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_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 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

上面語句得到以下結果 -

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 set

MySQL發出錯誤,因為在2013年6月沒有創建取消訂單。 這意味著表達式SUM(IF(status ='Cancelled',1,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 ='Cancelled',1,0))返回0,這也使得NULLIF(SUM(IF(status ='Cancelled',1,0) ,0)表達式返回NULL值。

在本教程中,我們向您介紹了NULLIF函數,這在某些情況下非常方便,例如阻止查詢中的零錯誤

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的MySQL nullif()函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。