MySQL coalesce()函数
轉(zhuǎn)載自??MySQL coalesce()函數(shù)
MySQL?COALESCE函數(shù)介紹
下面說明了COALESCE函數(shù)語法:
COALESCE(value1,value2,...);COALESCE函數(shù)需要許多參數(shù),并返回第一個非NULL參數(shù)。如果所有參數(shù)都為NULL,則COALESCE函數(shù)返回NULL。
以下顯示了使用COALESCE函數(shù)的一些簡單示例:
mysql> SELECT COALESCE(NULL, 0); -- 0 SELECT COALESCE(NULL, NULL); -- NULL +-------------------+ | COALESCE(NULL, 0) | +-------------------+ | 0 | +-------------------+ 1 row in set+----------------------+ | COALESCE(NULL, NULL) | +----------------------+ | NULL | +----------------------+ 1 row in set?
MySQL COALESCE函數(shù)示例
請參見示例數(shù)據(jù)庫(yiibai)中的以下customers表。
mysql> desc customers; +------------------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------------+---------------+------+-----+---------+-------+ | customerNumber | int(11) | NO | PRI | NULL | | | customerName | varchar(50) | NO | | NULL | | | contactLastName | varchar(50) | NO | | NULL | | | contactFirstName | varchar(50) | NO | | NULL | | | phone | varchar(50) | NO | | NULL | | | addressLine1 | varchar(50) | NO | | NULL | | | addressLine2 | varchar(50) | YES | | NULL | | | city | varchar(50) | NO | | NULL | | | state | varchar(50) | YES | | NULL | | | postalCode | varchar(15) | YES | | NULL | | | country | varchar(50) | NO | | NULL | | | salesRepEmployeeNumber | int(11) | YES | MUL | NULL | | | creditLimit | decimal(10,2) | YES | | NULL | | +------------------------+---------------+------+-----+---------+-------+ 13 rows in set以下查詢返回orders表中所有客戶的客戶名稱,城市,州和國家。
SELECT customerName, city, state, country FROMcustomers;執(zhí)行上面查詢語句,得到以下結(jié)果 -
+------------------------------------+-------------------+---------------+--------------+ | customerName | city | state | country | +------------------------------------+-------------------+---------------+--------------+ | Atelier graphique | Nantes | NULL | France | | Signal Gift Stores | Las Vegas | NV | USA | | Australian Collectors, Co. | Melbourne | Victoria | Australia | | La Rochelle Gifts | Nantes | NULL | France | | Baane Mini Imports | Stavern | NULL | Norway | ************** 此處省略了一大波數(shù)據(jù) ****************************************************** | Motor Mint Distributors Inc. | Philadelphia | PA | USA | | Signal Collectibles Ltd. | Brisbane | CA | USA | | Double Decker Gift Stores, Ltd | London | NULL | UK | | Diecast Collectables | Boston | MA | USA | | Kelly's Gift Shop | Auckland | NULL | New Zealand | +------------------------------------+-------------------+---------------+--------------+ 122 rows in set如您所見,state列具有NULL值,因為某些此類信息不適用于某些客戶的國家/地區(qū)。
要替換結(jié)果集中的NULL值,可以使用COALESCE函數(shù),如下查詢所示:
SELECT customerName, city, COALESCE(state, 'N/A'), country FROMcustomers;執(zhí)行上面查詢語句,得到以下結(jié)果 -
+------------------------------------+-------------------+------------------------+--------------+ | customerName | city | COALESCE(state, 'N/A') | country | +------------------------------------+-------------------+------------------------+--------------+ | Atelier graphique | Nantes | N/A | France | | Signal Gift Stores | Las Vegas | NV | USA | | Australian Collectors, Co. | Melbourne | Victoria | Australia | | La Rochelle Gifts | Nantes | N/A | France | | Baane Mini Imports | Stavern | N/A | Norway | | Mini Gifts Distributors Ltd. | San Rafael | CA | USA | | Havel & Zbyszek Co | Warszawa | N/A | Poland | | Blauer See Auto, Co. | Frankfurt | N/A | Germany | ************** 此處省略了一大波數(shù)據(jù) ****************************************************** | Kremlin Collectables, Co. | Saint Petersburg | N/A | Russia | | Raanan Stores, Inc | Herzlia | N/A | Israel | | Iberia Gift Imports, Corp. | Sevilla | N/A | Spain | | Motor Mint Distributors Inc. | Philadelphia | PA | USA | | Signal Collectibles Ltd. | Brisbane | CA | USA | | Double Decker Gift Stores, Ltd | London | N/A | UK | | Diecast Collectables | Boston | MA | USA | | Kelly's Gift Shop | Auckland | N/A | New Zealand | +------------------------------------+-------------------+------------------------+--------------+ 122 rows in set在這個例子中,如果state列中的值為NULL,則COALESCE函數(shù)將用N/A字符串代替。 否則,它返回state列的值。
使用COALESCE函數(shù)的另一個典型例子是當指定的一列為NULL時,將其中的值使用另一列來替換。
假設有一個具有以下結(jié)構(gòu)的articles表:
USE testdb; CREATE TABLE articles (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255) NOT NULL,excerpt TEXT,body TEXT NOT NULL,published_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );我們向articles表中插入一些數(shù)據(jù)。
INSERT INTO articles(title,excerpt,body) VALUES('MySQL COALESCE Tutorial','This tutorial is about MySQL COALESCE function', 'all about COALESCE function'),('MySQL 8.0 New Features',null, 'The following is a list of new features in MySQL 8.0');想象一下,假設必須在概述頁面上顯示文章,其中每篇文章包含標題,摘錄和發(fā)布日期(以及鏈接的文章頁面)。需要做的第一個任務是從文章表查詢此數(shù)據(jù):
mysql> SELECT id, title, excerpt, published_at FROMarticles; +----+-------------------------+------------------------------------------------+---------------------+ | id | title | excerpt | published_at | +----+-------------------------+------------------------------------------------+---------------------+ | 1 | MySQL COALESCE Tutorial | This tutorial is about MySQL COALESCE function | 2017-08-10 23:46:35 | | 2 | MySQL 8.0 New Features | NULL | 2017-08-10 23:46:35 | +----+-------------------------+------------------------------------------------+---------------------+ 2 rows in set可以看到id=2的文章沒有摘要,顯示文章時可能沒有導讀內(nèi)容了。
一個典型的解決方案是獲取文章正文中指定長度內(nèi)容,用來代替顯示摘錄。這時就可以使用COALESCE函數(shù)來實現(xiàn)了。
SELECT id, title, COALESCE(excerpt, LEFT(body, 150)), published_at FROMarticles;執(zhí)行上面查詢語句,得到以下結(jié)果 -
+----+-------------------------+------------------------------------------------------+---------------------+ | id | title | COALESCE(excerpt, LEFT(body, 150)) | published_at | +----+-------------------------+------------------------------------------------------+---------------------+ | 1 | MySQL COALESCE Tutorial | This tutorial is about MySQL COALESCE function | 2017-08-10 23:46:35 | | 2 | MySQL 8.0 New Features | The following is a list of new features in MySQL 8.0 | 2017-08-10 23:46:35 | +----+-------------------------+------------------------------------------------------+---------------------+ 2 rows in set在此示例中,如果excerpt列中的值為NULL,則COALESCE函數(shù)將返回oody列中內(nèi)容的前150個字符。
?
MySQL COALESCE和CASE表達式
除了使用COALESCE函數(shù),可以使用CASE表達式實現(xiàn)相同的效果。
以下查詢使用CASE表達式實現(xiàn)與上述示例相同的結(jié)果:
SELECT id,title,(CASEWHEN excerpt IS NULL THEN LEFT(body, 150)ELSE excerptEND) AS excerpt,published_at FROMarticles;在這個例子中,CASE表達式比使用COALESCE函數(shù)實現(xiàn)代碼更長。
?
MySQL COALESCE與IFNULL對比
IFNULL函數(shù)接受兩個參數(shù),如果不為NULL則返回第一個參數(shù),否則返回第二個參數(shù)。
IFNULL函數(shù)有兩個參數(shù),而COALESCE函數(shù)使用n個參數(shù)。如果參數(shù)的數(shù)量為2,則兩個函數(shù)都相同。
在本教程中,您已經(jīng)學習了如何使用MySQL?COALESCE函數(shù)來替換NULL值。
總結(jié)
以上是生活随笔為你收集整理的MySQL coalesce()函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷云科技有限公司和-面向小型和大型企业的
- 下一篇: MySQL isnull()函数基本指南