实际上,我不确定这个问题的标题应该是什么。
我有一张表,有一列。数据是二进制数据。每个位映射到1个文本字符串。现在,我有一个数字X.如何获得数字M代表的文本字符串?
例如,
bit0 maps: bit0;
bit1 maps: bit1;
bit2 maps: bit2;
bit3 maps: bit3;
....
bit7 maps: bit7;
现在,我的数字X = 6,其中= 4 + 2。我想得到文本字符串'bit2,bit1'。
如果我们不能生成'bit2,bit1',我们可以生成多行,其中一个有'bit2',一个有'bit1'(如果二进制数据有更多的1,则为更多行)?
是否可以在不使用存储过程的情况下在SQL查询中执行此操作?
感谢
答案 0 :(得分:1)
我假设“没有存储过程”实际上意味着“在单个查询中”。您可以使用STUFF
/ XML PATH
方法轻松完成此操作。我不知道你的表结构,所以你必须对你的数据源进行概括,但它应该产生你正在寻找的结果。
DECLARE @value int = 6
SELECT STUFF(
(SELECT
CASE WHEN (@value & 128) > 0 THEN ',bit7' ELSE '' END,
CASE WHEN (@value & 64) > 0 THEN ',bit6' ELSE '' END,
CASE WHEN (@value & 32) > 0 THEN ',bit5' ELSE '' END,
CASE WHEN (@value & 16) > 0 THEN ',bit4' ELSE '' END,
CASE WHEN (@value & 8) > 0 THEN ',bit3' ELSE '' END,
CASE WHEN (@value & 4) > 0 THEN ',bit2' ELSE '' END,
CASE WHEN (@value & 2) > 0 THEN ',bit1' ELSE '' END,
CASE WHEN (@value & 1) > 0 THEN ',bit0' ELSE '' END
FOR XML PATH ('')), 1, 1, '')