Mysql字段為null的加減乘除運(yùn)算方式
Mysql字段為null的加減乘除運(yùn)算
數(shù)據(jù)庫(kù)表test_table

如下查詢:
select id, total, used, (total - used) as have from test_table;
查詢結(jié)果:

解決辦法
使用IFNULL 函數(shù)來(lái)解決NULL值問(wèn)題
select id, IFNULL(total,0) as total, IFNULL(used,0) as used, (IFNULL(total,0) - IFNULL(used,0)) as have from test_table;
查詢結(jié)果:

數(shù)據(jù)庫(kù)關(guān)于null不參與運(yùn)算的坑
舉個(gè)例子:(閱讀時(shí):請(qǐng)記住這個(gè)字段以及它的值 )

如果數(shù)據(jù)庫(kù)表里字段值為 null 時(shí),那么在寫(xiě)sql語(yǔ)句用這個(gè)值去做比較運(yùn)算時(shí)(一般看見(jiàn) null 或者參數(shù)類型為 string 時(shí) 也沒(méi)有人去做加減乘除),除了 is nl 或者 is not nlll 沒(méi)有其他操作, 有時(shí) 字段類型 為 string ,值為 "2" 時(shí), 會(huì)用 <> 如果數(shù)據(jù)庫(kù)表里字段值為 null 時(shí),那么在寫(xiě)sql語(yǔ)句用這個(gè)值去做比較運(yùn)算時(shí)(一般看見(jiàn) null 或者參數(shù)類型為 string 時(shí) 也沒(méi)有人去做加減乘除),除了 is null 或者 is not null 沒(méi)有其他操作, 有時(shí) 字段類型 為 string ,值為 "2" 時(shí), 會(huì)用 <> (不等于)] 判斷,這都沒(méi)問(wèn)題,問(wèn)題出現(xiàn)在 null 與其他值同時(shí)存在這個(gè) 當(dāng)前字段 下,那么用 <> 會(huì)造成 mysql 查詢不到數(shù)據(jù),因?yàn)?<>"2" 不會(huì)把 null 過(guò)濾出去,此時(shí) null 是參與運(yùn)算的,所以sql語(yǔ)句應(yīng)當(dāng)調(diào)整為 坑 is null(is not null) and 坑=“2”(坑<>“2”) 這種寫(xiě)法,sql執(zhí)行之后才會(huì)是我們想要的結(jié)果。
發(fā)生場(chǎng)景
Mybatis框架的動(dòng)態(tài)sql 在寫(xiě)xml映射文件時(shí) 比如: <if test=" 坑 = ‘2’ 或(坑 <> ‘2’) > 這種不實(shí)時(shí)看數(shù)據(jù)庫(kù),腦子里還想著業(yè)務(wù)需求怎么實(shí)現(xiàn)時(shí)(一心二用)
其本質(zhì)還是對(duì)于 基礎(chǔ)知識(shí) 掌握不扎實(shí),所以不斷進(jìn)步的同時(shí),也不要忘了 夯實(shí)基礎(chǔ) 個(gè)人理解: 動(dòng)態(tài)sql最強(qiáng)大的 不是它的語(yǔ)法和格式的優(yōu)點(diǎn),首先 它并沒(méi)有原生sql語(yǔ)句的可讀性高,其次 動(dòng)態(tài)sql本質(zhì)也 僅僅 就起到一個(gè)sql語(yǔ)句拼接的作用,它真正強(qiáng)大的點(diǎn)是 <forEach> 這個(gè)可以遍歷集合的標(biāo)簽,這是原生sql語(yǔ)句無(wú)法做到的事情,所以在沒(méi)有對(duì) 集合 進(jìn)行操作的情況下,盡量用原生sql去做。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL字段時(shí)間類型該如何選擇實(shí)現(xiàn)千萬(wàn)數(shù)據(jù)下性能提升10%~30%
這篇文章主要介紹了MySQL字段的時(shí)間類型該如何選擇?才能實(shí)現(xiàn)千萬(wàn)數(shù)據(jù)下性能提升10%~30%,主要概述datetime、timestamp與整形時(shí)間戳相關(guān)的內(nèi)容,并在千萬(wàn)級(jí)別的數(shù)據(jù)量中測(cè)試它們的性能,最后總結(jié)出它們的特點(diǎn)與使用場(chǎng)景2023-10-10
MySQL創(chuàng)建用戶以及用戶權(quán)限詳細(xì)圖文教程
在MySQL中可以通過(guò)創(chuàng)建用戶來(lái)管理數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限,下面這篇文章主要給大家介紹了關(guān)于MySQL創(chuàng)建用戶以及用戶權(quán)限的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
MySQL登錄、訪問(wèn)及退出操作實(shí)戰(zhàn)指南
當(dāng)我們要使用mysql時(shí),一定要了解mysql的登錄、訪問(wèn)及退出,下面這篇文章主要給大家介紹了關(guān)于MySQL登錄、訪問(wèn)及退出操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
mysql8.0.25升級(jí)到mysql8.0.30全過(guò)程
本文介紹了MySQL版本升級(jí)的主要步驟,包括查看需升級(jí)版本、停止服務(wù)、下載8.0.30新版、解壓安裝包及備份舊文件,總結(jié)為個(gè)人經(jīng)驗(yàn)分享,供讀者參考2025-10-10
mysql樹(shù)目錄查詢語(yǔ)句優(yōu)化提高查詢效率
在諸多的管理類,辦公類等系統(tǒng)中,樹(shù)形結(jié)構(gòu)展示隨處可見(jiàn),本文主要介紹了mysql樹(shù)目錄查詢語(yǔ)句優(yōu)化提高查詢效率的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
MySQL中表復(fù)制:create table like 與 create table as select
這篇文章主要介紹了MySQL中表復(fù)制:create table like 與 create table as select,需要的朋友可以參考下2014-12-12
MySQL數(shù)據(jù)庫(kù)輸入密碼后閃退問(wèn)題的解決方法
這篇文章主要為大家詳細(xì)介紹了MySQL數(shù)據(jù)庫(kù)輸入密碼后閃退的問(wèn)題及解決方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
MySQL 實(shí)現(xiàn)lastInfdexOf的功能案例
這篇文章主要介紹了MySQL 實(shí)現(xiàn)lastInfdexOf的功能案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
mysql 連接出現(xiàn)Public Key Retrieval is n
在MySQL連接中出現(xiàn)“Public Key Retrieval is not allowed”錯(cuò)誤,通常是因?yàn)樵谑褂冒踩捉幼謱樱⊿SL)連接時(shí)遇到了問(wèn)題,本文就來(lái)介紹一下解決方法,感興趣的可以了解一下2024-03-03

