首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于检查输入值是否存在于值范围之间的sql查询

用于检查输入值是否存在于值范围之间的sql查询
EN

Stack Overflow用户
提问于 2012-12-04 14:49:07
回答 1查看 2.5K关注 0票数 2

我在mssql数据库中工作。我有以下场景,

我在行中的值为

2-5,10-12,67-89....

我需要一个sql查询来获取那些至少有一个包含用户输入的范围的行。

例如,如果用户输入是4,那么至少应该有一个包含4的范围,如(1-5)。

是否有可能用单个查询来实现相同的功能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-04 14:59:07

试试这个:

代码语言:javascript
复制
DECLARE @numberToFind INT = 4;
;WITH CTE
AS
(
    SELECT 
      arange,
      SUBSTRING(arange, 1, CHARINDEX('-', arange,1) - 1) "From",
      SUBSTRING(arange, 
                CHARINDEX('-', arange,1) + 1, 
                          LEN(arange) - CHARINDEX('-', arange,1) + 1) "To"
    FROM @ranges
) 
SELECT arange
FROM CTE
WHERE @numberToFind BETWEEN "From" AND "To";

SQL Fiddle Demo

如果这些范围存储为单个varchar字符串,则必须首先解析这些逗号分隔的范围,如下所示:

代码语言:javascript
复制
DECLARE @ranges VARCHAR(100) = ('2-5,10-12,67-89');
declare @numberToFind INT = 4;

DECLARE @Xml xml =  CONVERT(xml,
                            '<root><s>' + 
                            REPLACE(@ranges, ',', '</s><s>') + 
                            '</s></root>');

;WITH ParsedRanges
AS
(
    SELECT arange = T.c.value('.','varchar(20)')
    FROM @Xml.nodes('/root/s') T(c)
), CTE
AS
(
    SELECT 
      arange,
      SUBSTRING(arange, 1, CHARINDEX('-', arange,1) - 1) "From",
      SUBSTRING(arange, 
                CHARINDEX('-', arange,1) + 1, 
                LEN(arange) - CHARINDEX('-', arange,1) + 1) "To"
    FROM ParsedRanges
) 
SELECT arange
FROM CTE
WHERE @numberToFind BETWEEN "From" AND "To";

SQL Fiddle Demo

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13697527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档