Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Преобразование к двоичному виду  [new]
Tigera
Member

Откуда:
Сообщений: 162
Здравствуйте! Подскажите пожалуйста, есть ли какая-нибудь функция для преобразования десятичного числа к двоичному? Если нет, то как это вообще можно по-лучше организовать? Заранее спасибо.
22 ноя 06, 09:10    [3433013]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Nick_nsk
Member

Откуда:
Сообщений: 97
Не свойственно для SQL битовые строки ворочать. Перенести на клиента эту рутину пробовали?
22 ноя 06, 09:19    [3433045]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

Поиск
рулит...


Posted via ActualForum NNTP Server 1.3

22 ноя 06, 09:23    [3433062]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Tigera
Member

Откуда:
Сообщений: 162
В том-то и дело что на клиента это перенести нельзя, нужен вариант именно на SQL. И вот то, что ему это не свойственно и заставило обратиться за советом сюда.
22 ноя 06, 09:24    [3433066]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Tigera
Member

Откуда:
Сообщений: 162
RENaissance

Поиск
рулит...


видать я плохо искала. Спасибо!
22 ноя 06, 10:23    [3433363]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
select fn_replinttobitstring(123)

73 GL RA1OGE
22 ноя 06, 13:56    [3435212]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Tigera
Member

Откуда:
Сообщений: 162
Roman S. Golubin
select fn_replinttobitstring(123)

чего-то я такого не нашла
22 ноя 06, 14:21    [3435438]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
В 2000-м сервере было
22 ноя 06, 17:49    [3437397]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
aleks2
Guest
Tigera
Здравствуйте! Подскажите пожалуйста, есть ли какая-нибудь функция для преобразования десятичного числа к двоичному? Если нет, то как это вообще можно по-лучше организовать? Заранее спасибо.


declare @a int
set @a=123451
select 
 LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2) as bit)))
+LTRIM(STR(cast(@a&(2) as bit)))
+LTRIM(STR(cast(@a&1 as bit)))
22 ноя 06, 19:15    [3437962]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
guest00x
Guest
Даешь худойжественное скриптование!
/* --предварительно - Ctrl+T (результат запроса - в текст)
select '+case when @a&'+space(11-len(cast(power(2,a.number)as varchar)))+cast(power(2,a.number)as varchar)+'>0 then ''1'' else ''0'' end'
from master..spt_values a where a.type='P' and a.number<31 order by a.number desc
*/
declare @a int
set @a=123451
select
 case when @a& 1073741824>0 then '1' else '0' end
+case when @a&  536870912>0 then '1' else '0' end
+case when @a&  268435456>0 then '1' else '0' end
+case when @a&  134217728>0 then '1' else '0' end
+case when @a&   67108864>0 then '1' else '0' end
+case when @a&   33554432>0 then '1' else '0' end
+case when @a&   16777216>0 then '1' else '0' end
+case when @a&    8388608>0 then '1' else '0' end
+case when @a&    4194304>0 then '1' else '0' end
+case when @a&    2097152>0 then '1' else '0' end
+case when @a&    1048576>0 then '1' else '0' end
+case when @a&     524288>0 then '1' else '0' end
+case when @a&     262144>0 then '1' else '0' end
+case when @a&     131072>0 then '1' else '0' end
+case when @a&      65536>0 then '1' else '0' end
+case when @a&      32768>0 then '1' else '0' end
+case when @a&      16384>0 then '1' else '0' end
+case when @a&       8192>0 then '1' else '0' end
+case when @a&       4096>0 then '1' else '0' end
+case when @a&       2048>0 then '1' else '0' end
+case when @a&       1024>0 then '1' else '0' end
+case when @a&        512>0 then '1' else '0' end
+case when @a&        256>0 then '1' else '0' end
+case when @a&        128>0 then '1' else '0' end
+case when @a&         64>0 then '1' else '0' end
+case when @a&         32>0 then '1' else '0' end
+case when @a&         16>0 then '1' else '0' end
+case when @a&          8>0 then '1' else '0' end
+case when @a&          4>0 then '1' else '0' end
+case when @a&          2>0 then '1' else '0' end
+case when @a&          1>0 then '1' else '0' end

P.S. а по теме - Произвольная система исчисления с произвольными символами
22 ноя 06, 20:06    [3438095]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
бдшник
Guest
create function ToBits(@a int)
	returns nvarchar(32)
as begin
	declare @result nvarchar(32), @i int
	set @result = ''
	set @i = 30
	while @i >= 0
	begin
		set @result = @result + ltrim(str(cast(@a & power(2, @i) as bit)))
		set @i = @i - 1
	end
	return @result
end
go
create table bits (id int identity(0,1) primary key, bits nvarchar(32))
insert bits values (null)
declare @i int
set @i = 30 :)
while @i > 0
begin
	insert bits select bits from bits
	set @i = @i - 1
end
update bits set bits = dbo.ToBits(id)
go
create function ToBits2(@a int)
	returns nvarchar(32)
as begin
	declare @result nvarchar(32)
	select @result = bits from bits where id = @a
	return @result
end
go
select dbo.ToBits2(1)
select dbo.ToBits2(2)
select dbo.ToBits2(3)
select dbo.ToBits2(4)
select dbo.ToBits2(5)
select dbo.ToBits2(6)
select dbo.ToBits2(7)
drop table bits
drop function ToBits2
drop function ToBits
go
22 ноя 06, 21:02    [3438206]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
To aleks2, guest00x и бдшник

Сравните ваши решения на число 2147483647 а также отрицательные значения с тем что возвращает функция fn_replinttobitstring:
declare @a int
set @a=2147483647
select fn_replinttobitstring(@a)
22 ноя 06, 23:21    [3438459]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Решение для положительных чисел я приводил тут: Перевод десятеричного числа в двоичное

Что интересно работает в 3 раза быстрее чем родная микрософтовская fn_replinttobitstring():
declare @dt datetime set @dt = getdate()
select id, 
substring(bin, 1 + 4*(id/0x10000000), 4) +
substring(bin, 1 + 4*(id%0x10000000/0x1000000), 4) +
substring(bin, 1 + 4*(id%0x1000000/0x100000), 4) +
substring(bin, 1 + 4*(id%0x100000/0x10000), 4) +
substring(bin, 1 + 4*(id%0x10000/0x1000), 4) +
substring(bin, 1 + 4*(id%0x1000/0x100), 4) +
substring(bin, 1 + 4*(id%0x100/0x10), 4) +
substring(bin, 1 + 4*(id%0x10), 4) as bin
from master..sysobjects t1, (select '0000000100100011010001010110011110001001101010111100110111101111' as bin) t2
print datediff(ms, @dt, getdate())
go
-- 33 ms

declare @dt datetime set @dt = getdate()
select id, fn_replinttobitstring(id) as bin
from master..sysobjects t1
print datediff(ms, @dt, getdate())
go
-- 110 ms

Предлагаю в качестве домашнего задания найти решение для отрицательных чисел...
23 ноя 06, 00:43    [3438551]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Programmer_Ortodox
Member [заблокирован]

Откуда: Оттуда
Сообщений: 2471
aleks2
Tigera
Здравствуйте! Подскажите пожалуйста, есть ли какая-нибудь функция для преобразования десятичного числа к двоичному? Если нет, то как это вообще можно по-лучше организовать? Заранее спасибо.


declare @a int
set @a=123451
select 
 LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2) as bit)))
+LTRIM(STR(cast(@a&(2) as bit)))
+LTRIM(STR(cast(@a&1 as bit)))

Самый прикольный алгоритм из серии "Пилите, Шура.."
23 ноя 06, 01:00    [3438564]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
guest00x
Guest
VladRUS.ca
To aleks2, guest00x и бдшник

Сравните ваши решения...

Не понимаете? Хуйдожественное скриптование! Соревнование! При чем тут результаты и производительность?
Если нужны результаты и производительность - в поиск - сто раз ведь обсуждалось...
и ссылку приводил
guest00x
P.S. а по теме - Произвольная система исчисления с произвольными символами


А мне хочется побить безусловный рекорд aleks2! Делаю еще одну попытку:
/* --предварительно - Ctrl+T (результат запроса - в текст)
select '+case '+space(30-a.number)+'when '+space(a.number)+'@a&'+space(11-len(cast(power(2,a.number)as varchar)))+cast(power(2,a.number)as varchar)+'>0'+space(a.number)+' then ''1'' else ''0'' end'
from master..spt_values a where a.type='P' and a.number<31 order by a.number desc
*/
declare @a int
set @a=123451
select
 case when                               @a& 1073741824>0                               then '1' else '0' end
+case  when                              @a&  536870912>0                              then '1' else '0' end
+case   when                             @a&  268435456>0                             then '1' else '0' end
+case    when                            @a&  134217728>0                            then '1' else '0' end
+case     when                           @a&   67108864>0                           then '1' else '0' end
+case      when                          @a&   33554432>0                          then '1' else '0' end
+case       when                         @a&   16777216>0                         then '1' else '0' end
+case        when                        @a&    8388608>0                        then '1' else '0' end
+case         when                       @a&    4194304>0                       then '1' else '0' end
+case          when                      @a&    2097152>0                      then '1' else '0' end
+case           when                     @a&    1048576>0                     then '1' else '0' end
+case            when                    @a&     524288>0                    then '1' else '0' end
+case             when                   @a&     262144>0                   then '1' else '0' end
+case              when                  @a&     131072>0                  then '1' else '0' end
+case               when                 @a&      65536>0                 then '1' else '0' end
+case                when                @a&      32768>0                then '1' else '0' end
+case                 when               @a&      16384>0               then '1' else '0' end
+case                  when              @a&       8192>0              then '1' else '0' end
+case                   when             @a&       4096>0             then '1' else '0' end
+case                    when            @a&       2048>0            then '1' else '0' end
+case                     when           @a&       1024>0           then '1' else '0' end
+case                      when          @a&        512>0          then '1' else '0' end
+case                       when         @a&        256>0         then '1' else '0' end
+case                        when        @a&        128>0        then '1' else '0' end
+case                         when       @a&         64>0       then '1' else '0' end
+case                          when      @a&         32>0      then '1' else '0' end
+case                           when     @a&         16>0     then '1' else '0' end
+case                            when    @a&          8>0    then '1' else '0' end
+case                             when   @a&          4>0   then '1' else '0' end
+case                              when  @a&          2>0  then '1' else '0' end
+case                               when @a&          1>0 then '1' else '0' end
23 ноя 06, 10:12    [3439280]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
aleks2
Guest
guest00x
VladRUS.ca
To aleks2, guest00x и бдшник

Сравните ваши решения...

Не понимаете? Хуйдожественное скриптование! Соревнование! При чем тут результаты и производительность?
Если нужны результаты и производительность - в поиск - сто раз ведь обсуждалось...
и ссылку приводил
guest00x
P.S. а по теме - Произвольная система исчисления с произвольными символами


А мне хочется побить безусловный рекорд aleks2! Делаю еще одну попытку:
/* --предварительно - Ctrl+T (результат запроса - в текст)
select '+case '+space(30-a.number)+'when '+space(a.number)+'@a&'+space(11-len(cast(power(2,a.number)as varchar)))+cast(power(2,a.number)as varchar)+'>0'+space(a.number)+' then ''1'' else ''0'' end'
from master..spt_values a where a.type='P' and a.number<31 order by a.number desc
*/
declare @a int
set @a=123451
select
 case when                               @a& 1073741824>0                               then '1' else '0' end
+case  when                              @a&  536870912>0                              then '1' else '0' end
+case   when                             @a&  268435456>0                             then '1' else '0' end
+case    when                            @a&  134217728>0                            then '1' else '0' end
+case     when                           @a&   67108864>0                           then '1' else '0' end
+case      when                          @a&   33554432>0                          then '1' else '0' end
+case       when                         @a&   16777216>0                         then '1' else '0' end
+case        when                        @a&    8388608>0                        then '1' else '0' end
+case         when                       @a&    4194304>0                       then '1' else '0' end
+case          when                      @a&    2097152>0                      then '1' else '0' end
+case           when                     @a&    1048576>0                     then '1' else '0' end
+case            when                    @a&     524288>0                    then '1' else '0' end
+case             when                   @a&     262144>0                   then '1' else '0' end
+case              when                  @a&     131072>0                  then '1' else '0' end
+case               when                 @a&      65536>0                 then '1' else '0' end
+case                when                @a&      32768>0                then '1' else '0' end
+case                 when               @a&      16384>0               then '1' else '0' end
+case                  when              @a&       8192>0              then '1' else '0' end
+case                   when             @a&       4096>0             then '1' else '0' end
+case                    when            @a&       2048>0            then '1' else '0' end
+case                     when           @a&       1024>0           then '1' else '0' end
+case                      when          @a&        512>0          then '1' else '0' end
+case                       when         @a&        256>0         then '1' else '0' end
+case                        when        @a&        128>0        then '1' else '0' end
+case                         when       @a&         64>0       then '1' else '0' end
+case                          when      @a&         32>0      then '1' else '0' end
+case                           when     @a&         16>0     then '1' else '0' end
+case                            when    @a&          8>0    then '1' else '0' end
+case                             when   @a&          4>0   then '1' else '0' end
+case                              when  @a&          2>0  then '1' else '0' end
+case                               when @a&          1>0 then '1' else '0' end


У тебя "красявость" притянута за уши. А у меня она естественно служит задаче визуального контроля правильности...
23 ноя 06, 10:22    [3439346]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
aleks2
Guest
VladRUS.ca
To aleks2, guest00x и бдшник

Сравните ваши решения на число 2147483647 а также отрицательные значения с тем что возвращает функция fn_replinttobitstring:
declare @a int
set @a=2147483647
select fn_replinttobitstring(@a)


Ну проверил - нуля в старшем разряде нет, дык и условия на фиксированную ширину автор вопроса не ставил. Равно и задачу обработки отрицательных чисел.
23 ноя 06, 10:27    [3439382]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
aleks2
Guest
VladRUS.ca
Решение для положительных чисел я приводил тут: Перевод десятеричного числа в двоичное

Предлагаю в качестве домашнего задания найти решение для отрицательных чисел...


Дарагой, ну твой алгоритм можно усовершенствовать... создать таблицу двоичных представлений для ВСЕХ значений int и выбирать оттуда - выйдет еще быстрее.

Автор прЫнципа не понимал - вот и объясняем.

ДЗ:
select 
 case WHEN @a<0 THEN '1' ELSE '0' END
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2*2) as bit)))
+LTRIM(STR(cast(@a&(2*2) as bit)))
+LTRIM(STR(cast(@a&(2) as bit)))
+LTRIM(STR(cast(@a&1 as bit)))
23 ноя 06, 10:36    [3439460]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
declare @a int
set @a=2147483647

select case when @a & power(2,number) <>  0 then '1' else '0' end
from master..spt_values where type='P' and number<31
order by number
for xml path('')
23 ноя 06, 11:01    [3439670]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Упс!

declare @a int
set @a=2147483647

select case when @a & power(2,number) <>  0 then '1' else '0' end
from master..spt_values where type='P' and number<31
order by number desc
for xml path('')

--
73 GL RA1OGE
23 ноя 06, 11:02    [3439682]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
guest00x
Guest
Roman S. Golubin - троекратное "ку" - ку-ку-ку!!!
как первооткрывателю распрекраснейшей штучки "for xml path('')", с помощью которой уже сейчас можно:
1) склеить строку из значений поля наилучшим образом
2) представить число в двоичном виде не худшим образом
3) ... (созревает)
23 ноя 06, 11:09    [3439723]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Tigera
Member

Откуда:
Сообщений: 162
VladRUS.ca

select id,
substring(bin, 1 + 4*(id/0x10000000), 4) +
substring(bin, 1 + 4*(id%0x10000000/0x1000000), 4) +
substring(bin, 1 + 4*(id%0x1000000/0x100000), 4) +
substring(bin, 1 + 4*(id%0x100000/0x10000), 4) +
substring(bin, 1 + 4*(id%0x10000/0x1000), 4) +
substring(bin, 1 + 4*(id%0x1000/0x100), 4) +
substring(bin, 1 + 4*(id%0x100/0x10), 4) +
substring(bin, 1 + 4*(id%0x10), 4) as bin
from master..sysobjects t1, (select '0000000100100011010001010110011110001001101010111100110111101111' as bin) t2


Спасибо большущее за помощь, воспользовалась вот этим вариантом. Для решения моей задачи он вполне подходит.
23 ноя 06, 12:33    [3440568]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
guest00x
2) представить число в двоичном виде не худшим образом

Ну почему только в двоичной?
select substring('0123456789ABCDEF',@a / power(16,number) % 16+1,1)
from master..spt_values where type='P' and number<7
order by number desc
for xml path('')
23 ноя 06, 12:57    [3440786]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
guest00x
Guest
Roman S. Golubin
Ну почему только в двоичной?

исправляюсь:
2) представить число в произвольной системе исчисления не худшим(а возможно и лучшим, требуется доп.исследование) образом

P.S. Не постесняюсь повторить три "ку" для Романа - ку-ку-ку!!!
23 ноя 06, 13:08    [3440880]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование к двоичному виду  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Еще УПС!

select substring('0123456789ABCDEF',@a / power(16,number) % 16+1,1)
from master..spt_values where type='P' and number<8
order by number desc
for xml path('')

73 GL RA1OGE
23 ноя 06, 13:08    [3440881]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить