You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL使用IN包含多浮点数查询返回NULL问题求助

问题原因及解决办法

这事儿核心是浮点数精度误差在搞鬼:

  • 要是LifeExpectancy字段用的是FLOAT或DOUBLE这类近似数值类型,数据库根本存不住45.2、46.2这种十进制小数的精确值——实际存在库里的可能是45.199999999999996这类近似值。
  • 单个查IN (45.2)时,数据库会把你写的45.2转成对应的近似浮点数,刚好能和库里存的近似值对上;但同时放两个值IN (45.2,46.2)时,多值匹配的逻辑下,这种精确比对就卡壳了,找不到匹配结果。

解决办法

想绕开这个坑,试试这几种方式:

  1. 换字段类型:把LifeExpectancy改成DECIMAL/NUMERIC这类精确数值类型,能准确存住十进制小数,以后就不会有这种匹配问题。
  2. 不用精确值匹配,改用范围查询:
    SELECT * FROM world.country c 
    WHERE (c.LifeExpectancy BETWEEN 45.19 AND 45.21)
       OR (c.LifeExpectancy BETWEEN 46.19 AND 46.21);
    
  3. 加精度容忍的比较逻辑:判断字段值和目标值的差值小于一个极小的阈值,比如:
    SELECT * FROM world.country c 
    WHERE ABS(c.LifeExpectancy - 45.2) < 0.01
       OR ABS(c.LifeExpectancy - 46.2) < 0.01;
    

内容的提问来源于stack exchange,提问作者Filipe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:48:35