2015-08-10 2 views
-1

На самом деле, я не уверен, какой титул этот вопрос должен быть.SQL Query двоичные данные для генерации текста?

У меня есть стол, который имеет 1 столбец. Данные представляют собой двоичные данные. Каждый бит соответствует 1 текстовой строке. Теперь у меня есть число X. Как я могу получить текстовую строку, которую представляет номер M?

Например,

bit0 maps: bit0; 
bit1 maps: bit1; 
bit2 maps: bit2; 
bit3 maps: bit3; 
.... 
bit7 maps: bit7; 

Теперь у меня есть число Х = 6, = 4 + 2. Я хочу получить текстовую строку «бит2, бит1».

Если мы не сможем генерировать «бит2, бит1», можем ли мы создать несколько строк, у которых есть «бит2», а у одного есть «бит1» (или больше строк, если двоичные данные имеют больше 1 с)?

Возможно ли это сделать в SQL-запросе без использования хранимой процедуры?

благодаря

+0

Что вы пытаетесь сделать с сохранением байтов отдельно в строках? Это не имеет смысла для меня. – CPMunich

+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, '') 
Смежные вопросы