根据指定数字查询临时表中对应区间的DisplayName
问题解决:根据数字匹配区间返回对应DisplayName
原临时表结构及数据
CREATE TABLE #TempTable ( DisplayName VARCHAR(50), Value1 VARCHAR(50), Value2 VARCHAR(50) ) INSERT INTO #TempTable VALUES ('569-580','569','580'), ('581-592','581','592'), ('593-607','593','607'), ('608-620','608','620') SELECT * FROM #TempTable
需求说明
当提供一个数字时,判断该数字是否落在某条记录的Value1至Value2区间内(包含边界值),返回对应的DisplayName。例如:
- 输入606,输出
'593-607' - 输入608,输出
'608-620'
解决方案
由于Value1和Value2是字符串类型,直接比较会出现逻辑错误(比如字符串'99'会被判定为大于'100'),必须先转换为数值类型再进行区间匹配。
基础查询(输入为数字类型)
-- 定义输入数字,替换为实际需要查询的值 DECLARE @InputNumber INT = 606 SELECT DisplayName FROM #TempTable WHERE CAST(Value1 AS INT) <= @InputNumber AND CAST(Value2 AS INT) >= @InputNumber
处理输入为字符串的情况
-- 定义输入字符串,替换为实际需要查询的值 DECLARE @InputStr VARCHAR(50) = '608' SELECT DisplayName FROM #TempTable WHERE CAST(Value1 AS INT) <= CAST(@InputStr AS INT) AND CAST(Value2 AS INT) >= CAST(@InputStr AS INT)
兼容非数字数据的安全查询
如果Value1或Value2中存在非数字内容,使用TRY_CAST避免查询报错(转换失败时该条记录会被自动过滤):
DECLARE @InputNumber INT = 606 SELECT DisplayName FROM #TempTable WHERE TRY_CAST(Value1 AS INT) <= @InputNumber AND TRY_CAST(Value2 AS INT) >= @InputNumber
内容的提问来源于stack exchange,提问作者VAIB TAG
相关产品推荐
相关产品推荐

