SQL Query二进制数据生成文本?

时间:2015-08-10 20:51:07

标签: sql-server sql-server-2008

实际上,我不确定这个问题的标题应该是什么。

我有一张表,有一列。数据是二进制数据。每个位映射到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查询中执行此操作?

感谢

1 个答案:

答案 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, '')