首頁 > 軟體

Mysql欄位為null的加減乘除運算方式

2022-09-30 14:02:26

Mysql欄位為null的加減乘除運算

資料庫表test_table

如下查詢:

select 
id,
total,
used,
(total - used) as have 
from test_table;

查詢結果:

解決辦法

使用IFNULL 函數來解決NULL值問題

select 
id,
IFNULL(total,0) as total,
IFNULL(used,0) as used,
(IFNULL(total,0) - IFNULL(used,0)) as have 
from test_table;

查詢結果:

資料庫關於null不參與運算的坑

舉個例子:(閱讀時:請記住這個欄位以及它的值 )

如果資料庫表裡欄位值為 null 時,那麼在寫sql語句用這個值去做比較運算時(一般看見 null 或者引數型別為 string 時 也沒有人去做加減乘除),除了 is nl 或者 is not nlll 沒有其他操作, 有時 欄位型別string ,值為 "2" 時, 會用 <> 如果資料庫表裡欄位值為 null 時,那麼在寫sql語句用這個值去做比較運算時(一般看見 null 或者引數型別為 string 時 也沒有人去做加減乘除),除了 is null 或者 is not null 沒有其他操作, 有時 欄位型別string ,值為 "2" 時, 會用 <> (不等於)] 判斷,這都沒問題,問題出現在 null 與其他值同時存在這個 當前欄位 下,那麼用 <> 會造成 mysql 查詢不到資料,因為 <>"2" 不會把 null 過濾出去,此時 null 是參與運算的,所以sql語句應當調整為 坑 is null(is not null) and 坑=“2”(坑<>“2”) 這種寫法,sql執行之後才會是我們想要的結果。

發生場景

Mybatis框架的動態sql 在寫xml對映檔案時 比如: <if test=" 坑 = ‘2’ 或(坑 <> ‘2’) > 這種不實時看資料庫,腦子裡還想著業務需求怎麼實現時(一心二用)

其本質還是對於 基礎知識 掌握不紮實,所以不斷進步的同時,也不要忘了 夯實基礎 個人理解: 動態sql最強大的 不是它的語法和格式的優點,首先 它並沒有原生sql語句的可讀性高,其次 動態sql本質也 僅僅 就起到一個sql語句拼接的作用,它真正強大的點是 <forEach> 這個可以遍歷集合的標籤,這是原生sql語句無法做到的事情,所以在沒有對 集合 進行操作的情況下,儘量用原生sql去做。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com