日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 查询有 float 类型的字段查不到

發布時間:2025/3/15 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 查询有 float 类型的字段查不到 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題
之前在用 mysql 查詢有 float 字段的時候,比如某一個字段 fee,明明有一條是 fee 為 1.99 的記錄,但是就是查不到??

select * from fee_mode where is_pp_recurring = 1 and is_enable = 1 and fee = 1.99

后面查了一下,發現原來查詢 float 字段是有坑的:
原來在 MYSQL 中,字段類型為 float 的字段,如果不指定 float 的長度和小數點位數,要根據 float 字段的值精確查找,結果會是空,原因是在 mysql 中,float是浮點數,Mysql存儲的時候是近似值,所以用精確查找無法匹配;但可以用like去匹配。

一、解決方法

  • 修改為 double 類型
  • 將float 改為 double 類型,不會出現這種問題,但是如果數據庫中數據量龐大,或者修改量太大,則不適合這個方法.這個方法只適合設計數據庫的初期階段。
    原因是這樣的:10.28,這樣的浮點值在電腦存放為 10.27999973297119140625 這種形式,同時務必注意:修改表字段類型,需要在當前表中無數據的時候修改,如果有數據的話,那已有浮點數據將會出現很多小數點。

  • 設置float的精度
  • 如果提前知道要查詢的 float 字段的值的精度的話,只要設置float的精度然后進行查詢也是可以的,比如本例中,1.99 就是兩個精度,那么就可以這樣查詢:

    select * from fee_mode where format(fee,2) = format(1.99,2);

    這樣也是可以的。

  • 使用concat函數
  • 使用了concat函數,將浮點數用空字符串連接起來,轉換成字符串來進行查詢:

    select * from fee_mode where is_pp_recurring = 1 and is_enable = 1 AND concat(fee, '') = '1.99'


    文章轉自

    總結

    以上是生活随笔為你收集整理的mysql 查询有 float 类型的字段查不到的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。