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

如何编写SQL查询验证Count值是否匹配Range字符串中的数值范围?

解决Count与Range不匹配的SQL查询问题

嘿,你的思路方向是对的,但string_split返回的是多行结果,直接用between没法把每行的Range拆分出的上下限和对应的Count关联起来,所以才会出错。我给你两种可行的解决方案,根据你的实际需求选就行:

方案一:利用固定Range取值的CASE语句(推荐,性能更好)

因为你提到Range的取值只有1-100、101-200、201-300这三种,直接用CASE语句把每个Range映射成对应的上下限是最直接高效的:

SELECT *
FROM YourTable
WHERE 
  Count NOT BETWEEN 
    CASE Range
      WHEN '1-100' THEN 1
      WHEN '101-200' THEN 101
      WHEN '201-300' THEN 201
    END
    AND
    CASE Range
      WHEN '1-100' THEN 100
      WHEN '101-200' THEN 200
      WHEN '201-300' THEN 300
    END;

这个查询会检查每条记录的Count是否不在其Range对应的区间内,像你例子里ID=3的记录,Count=155不在201-300之间,就会被筛选出来。

方案二:动态拆分Range字符串(通用型,适合Range可能扩展的情况)

如果以后Range的取值可能增加,不想每次修改CASE语句,可以用字符串拆分的方法提取上下限:

SELECT *
FROM YourTable
WHERE 
  Count NOT BETWEEN 
    CAST(SUBSTRING(Range, 1, CHARINDEX('-', Range) - 1) AS INT)
    AND
    CAST(SUBSTRING(Range, CHARINDEX('-', Range) + 1, LEN(Range)) AS INT);

这里用CHARINDEX找到-的位置,然后通过SUBSTRING拆分出Range的最小值和最大值,转换成整数后用BETWEEN判断是否不匹配。

记得把查询里的YourTable换成你实际的表名哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:45:25