我已经广泛搜索了相关的答案,但都没有完全满足我需要做的事情。在SQL Server中解析/索引二进制字符串
为了我们的目的,我有一个包含50个字符的二进制字符串的列。在我们的数据库中,它实际上有数百个字符。
我们的数据库中每个唯一的物品ID都有一个字符串。每个'1'的位置标记一个特定的标准为真,'0'为假,因此这些零和零的索引位置非常重要。大多数情况下,我关心1的位置。
我不更新任何数据库,所以我第一次决定尝试做一个循环来查看每串并创造1的位置的列表。
declare @binarystring varchar(50) = '10000010000110000001000000000000000000000000000001'
declare @position int = 0
declare @list varchar(200) = ''
while (@position <= len(@binarystring))
begin
set @position = charindex('1', @binarystring, @position)
set @list = @list + ', ' + convert(varchar(10),@position)
set @position = charindex('1', @binarystring, @position)+1
end
select right(@list, len(@list)-2)
这将创建以下列表:
1, 7, 12, 13, 20, 50
然而,循环将轰炸,如果没有“1”在字符串的结尾,因为我通过串通过事件搜索而不是一次一个字符。我不知道如何满足中断标准,当循环通常会到达字符串的末尾,而不存在1.
有没有一个简单的解决方案,我的循环轰炸,我应该在第一个循环地点?
我试图解析的其他方法,联合加盟,索引等,但考虑到这个非常具体的情况下,我无法找到我确实很需要什么样的任意组合。上面的代码是迄今为止我所掌握的最好的代码。
我并不特别需要分隔的列表作为输出一个逗号,但我需要知道在字符串中全部为1的位置。 1的数量不尽相同,但字符串大小始终相同。
这是我第一次张贴到计算器,但我已经使用的答案很多次。我试图用相关信息给出一个明确的问题。如果有什么我可以帮忙的,我会尽力满足任何要求。
这种固定没有问题的伟大工程在字符串的末尾有一个1,但是如果字符串中没有1,就会弹出。有没有好的抓住所有这一切?也许是个案陈述? – 2014-11-06 14:08:10
@Muffin_Cup。 。 。在这种情况下,这个“炸弹”将如何?如果发生这种情况,那么'@ list'将是空的。 – 2014-11-06 18:46:49