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

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL coalesce()函数

發(fā)布時間:2023/12/3 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL coalesce()函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。