MySQL 查詢decimal字段去除自動補零


1.情景展示

  在MySQL中,我們可以將字段類型定義為decimal,這樣就可以設置保留的小數位。

  在執行插入操作的時候,即使你插入的是整數,插入的數值將會自動為你補齊2位小數,這本身是沒有問題的;

  問題在於:

  當如果你查詢的字段為空時,如果使用0來替代,MySQL依然會為你自動補零,如下圖所示:

  這本身也不算是太大的毛病,既然結果都是0了,在我這里需求是:不讓它自動補零,如何實現?

2.原因分析

  先將0轉換成字符串,再轉回數值類型;

  語法:

  0 + CAST(IFNULL(COLUMN,0) AS CHAR)

3.解決方案

SELECT  0 + CAST(IFNULL(T.PREPAYAMOUNT, 0) AS CHAR) PREPAYAMOUNT from cz_fet_main_mz t;  

 

  雖然當結果為0時,去掉了自動補零的問題,但是,它也把有數值的自動補零給去掉了,加上去重,查詢結果如下:

  這根本不是我們想要的結果;

  正確的方式應該是:

SELECT IF(0 + CAST(IFNULL(T.PREPAYAMOUNT, 0) AS CHAR)=0, 0, T.PREPAYAMOUNT) PREPAYAMOUNT from cz_fet_main_zy t

4.拓展

再來個高級點的;

  現在這兩個字段都是保留2位小數;

  可以都為空,也存在只有其中一個有值;

  現在,想實現的效果是:

  前者有值,取前者,前者的值如果為0或null時,取后者,后者結果必須>=0。

SELECT IF(0 + CAST(IFNULL(T.DBBXBX, 0) AS CHAR)=0, IF(0 + CAST(IFNULL(T.DEBXBX, 0) AS CHAR)=0, 0, T.DEBXBX), T.DBBXBX) DE_DBBXBX from cz_fet_main_zy t

  這里不能看到囊括的所有信息,我們可以去一下重

  如果值為0的話,自動補了零,這不符合我們的要求呀,那我們再用distinct試一下;

  我們會發現,不管是用distinct還是group by,會自動對其進行補零操作,不知道這是為什么,我覺得是數據類型發生了變化。

  不管怎樣,上面的SQL是可行的。

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM