Mysql實(shí)現(xiàn)null值排在最前/最后的方法示例
前言
我們已經(jīng)知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句來讀取數(shù)據(jù)表中的數(shù)據(jù),但是當(dāng)提供的查詢條件字段為 NULL 時(shí),該命令可能就無法正常工作。
為了處理這種情況,MySQL提供了三大運(yùn)算符:
- IS NULL: 當(dāng)列的值是 NULL,此運(yùn)算符返回 true。
- IS NOT NULL: 當(dāng)列的值不為 NULL, 運(yùn)算符返回 true。
- <=>: 比較操作符(不同于=運(yùn)算符),當(dāng)比較的的兩個(gè)值為 NULL 時(shí)返回 true。
關(guān)于 NULL 的條件比較運(yùn)算是比較特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在 MySQL 中,NULL 值與任何其它值的比較(即使是 NULL)永遠(yuǎn)返回 false,即 NULL = NULL 返回false 。
MySQL 中處理 NULL 使用 IS NULL 和 IS NOT NULL 運(yùn)算符。
最近在做項(xiàng)目遷移,Oracle版本的遷到Mysql版本,遇到有些oracle的函數(shù),mysql并沒有,所以就只好想自定義函數(shù)或者找到替換函數(shù)的方法進(jìn)行改造。
oracle做數(shù)據(jù)排序的時(shí)候,有時(shí)候可以用nulls first或者nulls last將null值排在最前或者最后。
oracle方法:
null值排在最前
select * from A order by a desc null first
null值排在最后
select * from A order by a desc null last
不過遷到Mysql的話,mysql并沒有提供類似函數(shù),所以要怎么實(shí)現(xiàn)?
下面給出解決方法:
null值排在最后,用Mysql的IF和ISNULL函數(shù)。如果為空返回1,否返回0
select * from A order by IF(ISNULL(a),1,0),a desc
null值排在最前,用Mysql的IF和ISNULL函數(shù)。如果為空返回1,否返回0
select * from A order by IF(ISNULL(a),0,1),a desc
如果mybatis里需要oracle和Mysql版本的,或者可以從后臺(tái)傳個(gè)數(shù)據(jù)表版本標(biāo)識(shí)dbType,或者直接用mybatis的_databaseId方法。
<if test="dbType=='oracle'"> order by c.create_date desc nulls last </if> <if test="dbType=='mysql'"> order by IF(ISNULL(c.create_date),1,0), c.create_date desc </if>
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
銀河麒麟V10安裝MySQL8.0.28并實(shí)現(xiàn)遠(yuǎn)程訪問
這篇文章主要介紹了銀河麒麟V10安裝MySQL8028的圖文教程,并詳細(xì)介紹了遠(yuǎn)程訪問的實(shí)現(xiàn)方法,本文通過圖文命令給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
mysql時(shí)間是varchar類型進(jìn)行比較
本文主要介紹了mysql時(shí)間是varchar類型進(jìn)行比較,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
MySQL無法啟動(dòng)1067錯(cuò)誤的又一種解決方法(機(jī)房斷電)
今早在對(duì)一張table 創(chuàng)建primay key過程中發(fā)生了斷電,當(dāng)電腦再次啟動(dòng)時(shí)候,發(fā)現(xiàn)mysql 服務(wù)無法啟動(dòng),使用 net start 提示 1067錯(cuò)誤,折騰了2個(gè)小時(shí)無法解決,后來只能通過手工刪除數(shù)據(jù)文件,日志文件,再啟動(dòng)服務(wù),然后導(dǎo)入數(shù)據(jù)來完成2013-01-01
MySQL使用binlog日志恢復(fù)數(shù)據(jù)的方法步驟
binlog日志是用于記錄所有修改數(shù)據(jù)庫(kù)內(nèi)容的操作,本文主要介紹了MySQL使用binlog日志恢復(fù)數(shù)據(jù)的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
如何使用MySQL查詢某個(gè)列中相同值的數(shù)量統(tǒng)計(jì)
這篇文章的主要內(nèi)容是通過MySQL查詢某個(gè)列中相同值的數(shù)量統(tǒng)計(jì),文章簡(jiǎn)潔明了,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-07-07
mysql?count()函數(shù)不計(jì)算null和空值問題
這篇文章主要介紹了mysql?count()函數(shù)不計(jì)算null和空值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Windows10下mysql 5.7.21 Installer版安裝圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows10下mysql 5.7.21 Installer版安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09

