sql - 检查数字是否在字符串范围内
问题描述
我有一张桌子
ID |
Count |
Range |
---|---|---|
1 | 33 | 1-100 |
2 | 120 | 101-200 |
3 | 155 | 201-300 |
是Range
一个字符串,只能包含值1-100
, 101-200
, 201-300
。我需要编写一个查询来检查计数和范围是否合适,所以应该弹出 155。
我的想法是:
select *
from Tabe
where Count between (select value from string_split(Range, '-'))
但这不起作用。有谁可以帮我离开这里吗?
解决方案
马上,我将立即建议您更改表结构,为每个范围的下限和上限设置单独的列:
| ID | Count | lower_range | upper_range |
| 1 | 33 | 1 | 100 |
| 2 | 120 | 101 | 200 |
| 3 | 155 | 201 | 300 |
使用这种改进的设计,您只需要一个简单的查询:
SELECT *
FROM yourTable
WHERE Count BETWEEN lower_range AND upper_range;
这种方法的优点是上述查询是完全可搜索的(即可以使用索引,如果定义了合适的索引)。它还避免了您必须执行一些 SQL olympics 来隔离每个连字符范围字符串的下部和上部组件。由于您的意图是将这些数字用作numbers,因此只需使用上述设计即可。
编辑:
如果您真的坚持这种设计,可以使用以下查询:
SELECT *
FROM yourTable
WHERE
Count BETWEEN CAST(SUBSTRING([Range], 1, CHARINDEX('-', [Range]) - 1) AS int) AND
CAST(SUBSTRING([Range], CHARINDEX('-', [Range]) + 1, LEN([Range])) AS int);