Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как можно преобразовать int в двоичное число? средствами SQL 
V
    Опции темы
lankin
Дата 24.11.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 377
Регистрация: 13.12.2006

Репутация: нет
Всего: нет



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

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

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

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

Заранее благодарю.
PM MAIL   Вверх
Zloxa
Дата 24.11.2008, 13:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Зачем конвертить?
Можно сразу посчитать
Код

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 - значение вставляемого бита

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

Это сообщение отредактировал(а) Zloxa - 24.11.2008, 13:59


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
lankin
Дата 24.11.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 377
Регистрация: 13.12.2006

Репутация: нет
Всего: нет



Вот такую формулу придумали:

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))

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.