Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Как можно преобразовать int в двоичное число?


Автор: lankin 24.11.2008, 13:12
В общем вот такой интересный вопрос: можно ли в SQL число int конвертировать в двоичную систему и, преобразовав, снова конвертировать в int?

Например, у меня есть число "19". Я хочу его разложить, чтобы в итоге получилось "10011" в двоичной системе.
Затем, я хочу добавить в середину, а именно, сместить 3-й символ "0" и вставить свой символ, например "1". Получается вот такое число "100111". 
В конце снова конвертируем его в int и получаем число "39".

В VisualStudio это без проблем делается, а вот в SQL как?

Работаю в MS SQL Server2005.

Заранее благодарю.

Автор: Zloxa 24.11.2008, 13:36
Зачем конвертить?
Можно сразу посчитать
Код

select ((val&(-power(2,pos-1)))*2)+ (val&(power(2,pos-1)-1))  + power(2,pos-1) * bit result
from (select 19 val, 3 pos, 1 bit) s

val - исходное значение
pos - позиция вставляемого бита (порядковый номер справа налево)
bit - значение вставляемого бита

Первое слагаемое  - гасим все биты правее указаннной позициии и сдвигаем влево
Второе слагаемое - гасим все биты левее указанной позиции
Третье слагаемое - устанавливаем бит

Автор: lankin 24.11.2008, 14:16
Вот такую формулу придумали:

user posted image

где a-степень, равная тому биту, после которого начинается сдвиг, n-степень, равная a+1, то есть смешение на 1 бит.
Работает smile

Добавлено через 6 минут и 9 секунд
Код

update table
set val=(val/power(2,20))*power(2,21)+(val-(val/power(2,20))*power(2,20))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)