国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

Mysql實(shí)現(xiàn)null值排在最前/最后的方法示例

2024-07-25 19:09:38
字體:
供稿:網(wǎng)友

前言

我們已經(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é)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MYSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黎城县| 邳州市| 靖远县| 龙川县| 沙田区| 仁寿县| 榆树市| 云浮市| 望谟县| 彭阳县| 泰和县| 万州区| 兴仁县| 上犹县| 平远县| 滦平县| 申扎县| 邓州市| 桐庐县| 全南县| 阳东县| 九龙城区| 河池市| 新闻| 镇平县| 苍溪县| 麻栗坡县| 清水县| 嘉峪关市| 三原县| 弥渡县| 内黄县| 河南省| 襄垣县| 称多县| 青田县| 东光县| 阳城县| 怀柔区| 本溪市| 乌拉特后旗|