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

SQL如何匹配x.66~x.99区间数值?CASE WHEN语句判断问题

解决方案

你可以通过对1取模的方式直接提取数值的小数部分做区间判断,不需要转字符串用LIKE处理,性能和准确性都更高。

优化后代码

-- 所有列均为数值类型
CASE
  WHEN MOD(ROUND((O.POCET - O.P_DEL - O.P_DEL_DOD - O.P_FAK - O.P_VYD - O.P_OBJ)/SK.VELKE_BAL, 3), 1) BETWEEN 0.66 AND 0.99 THEN 1
  WHEN MOD(ROUND((O.POCET - O.P_DEL - O.P_DEL_DOD - O.P_FAK - O.P_VYD - O.P_OBJ)/SK.DOD_BAL, 3), 1) BETWEEN 0.66 AND 0.99 THEN 2
  ELSE 0
END

实现说明

  • MOD(数值,1) 运算会返回数值的小数部分,不管整数部分是0、1、2还是更大的整数,都能准确提取。比如1.78取模1得到0.78,3.92取模1得到0.92,完全符合匹配要求。
  • 如果用的是SQL Server数据库,没有内置MOD函数,可以用%运算符代替:ROUND(xxx,3) % 1
  • 全数据库兼容的写法可以用原值减去向下取整的结果提取小数:ROUND(xxx,3) - FLOOR(ROUND(xxx,3))
  • 如果担心浮点数精度问题,可以转整数判断:将计算结果乘1000后取整,对1000取模得到三位小数的整数形式,判断是否在660到990之间即可。

内容的提问来源于stack exchange,提问作者Know-nothing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:24:00