检查逗号分隔值的范围[SQL Server 2008]

时间:2014-08-20 10:10:33

标签: sql sql-server-2008

我有一个包含以下结构的表

 ID FirstName LastName CollectedNumbers
 1      A       B       10,11,15,55
 2      C       D       101,132,111

我想要一个基于CollectedNumber Range的布尔值。例如如果CollectedNumbers介于1和100之间,则如果超过100,则为True,然后为False。任何人都可以建议什么是最好的方法来实现这一目标。收集的数字永远不会被排序。

3 个答案:

答案 0 :(得分:4)

碰巧你有一个非常简单的方法来查看列表中的值是100还是超过。如果存在这样的值,则逗号之间至少有三个字符。如果数字不超过999,你可以这样做:

select (case when ','+CollectedNumbers+',' not like '%,[0-9][0-9][0-9]%' then 1
             else 0
        end) as booleanflag

这恰好适用于100的断点。这显然不是一般解决方案。最好的解决方案是使用每idCollectedNumber一行的联结表。

答案 1 :(得分:1)

只需在数据库中创建一个函数,它将返回true / False,它将字符串值(10,11,15,55)转换为一个表,并在这样的查询选择中调用该函数

Select 
    ID, FirstName, LastName, 
    dbo.fncCollectedNumbersResult(stringvalue) as Result 
from yourTableName

答案 2 :(得分:-2)

我认为最简单的方法是构建一个C#函数并使用内置的sqlclr将其作为自定义函数加载,然后调用它。

在C#函数中,您可以对数字进行排序,并使用简单的逻辑来返回您的真/假。