我有一个包含以下结构的表
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。任何人都可以建议什么是最好的方法来实现这一目标。收集的数字永远不会被排序。
答案 0 :(得分:4)
碰巧你有一个非常简单的方法来查看列表中的值是100还是超过。如果存在这样的值,则逗号之间至少有三个字符。如果数字不超过999,你可以这样做:
select (case when ','+CollectedNumbers+',' not like '%,[0-9][0-9][0-9]%' then 1
else 0
end) as booleanflag
这恰好适用于100的断点。这显然不是一般解决方案。最好的解决方案是使用每id
和CollectedNumber
一行的联结表。
答案 1 :(得分:1)
只需在数据库中创建一个函数,它将返回true / False,它将字符串值(10,11,15,55)转换为一个表,并在这样的查询选择中调用该函数
Select
ID, FirstName, LastName,
dbo.fncCollectedNumbersResult(stringvalue) as Result
from yourTableName
答案 2 :(得分:-2)
我认为最简单的方法是构建一个C#函数并使用内置的sqlclr将其作为自定义函数加载,然后调用它。
在C#函数中,您可以对数字进行排序,并使用简单的逻辑来返回您的真/假。