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

Откуда:
Сообщений: 55
Добрый день.


Подскажите как это сделать?

Вроде cast так не может...
23 янв 18, 11:13    [21129532]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
дампер
Member [заблокирован]

Откуда:
Сообщений: 55
Например, число 5 перевести в 101
23 янв 18, 11:13    [21129537]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
дампер,

вам на экран что-ли показывать? так то не надо никому
23 янв 18, 11:20    [21129561]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
дампер
Member [заблокирован]

Откуда:
Сообщений: 55
TaPaK
дампер,

вам на экран что-ли показывать? так то не надо никому


Строку чтоб вывел.
23 янв 18, 11:22    [21129575]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1130
дампер,
declare @I int = 5

;with A as
(
select 
 SUM(case when @i&8<>0 then 1 else 0 end) Bit3
,SUM(case when @i&4<>0 then 1 else 0 end) Bit2
,SUM(case when @i&2<>0 then 1 else 0 end) Bit1
,SUM(case when @i&1<>0 then 1 else 0 end) Bit0
)
select 
CAST(Bit3 as varchar(1)) +  CAST(Bit2 as varchar(1)) + CAST(Bit1 as varchar(1)) + CAST(Bit0 as varchar(1))
from A
23 янв 18, 11:28    [21129602]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
дампер
Member [заблокирован]

Откуда:
Сообщений: 55
Alexander Us
дампер,
declare @I int = 5

;with A as
(
select 
 SUM(case when @i&8<>0 then 1 else 0 end) Bit3
,SUM(case when @i&4<>0 then 1 else 0 end) Bit2
,SUM(case when @i&2<>0 then 1 else 0 end) Bit1
,SUM(case when @i&1<>0 then 1 else 0 end) Bit0
)
select 
CAST(Bit3 as varchar(1)) +  CAST(Bit2 as varchar(1)) + CAST(Bit1 as varchar(1)) + CAST(Bit0 as varchar(1))
from A



Спасибо, то что надо!
23 янв 18, 11:36    [21129647]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
putdoij
Guest
http://www.sqlservercentral.com/scripts/Miscellaneous/30722/

use tempdb
go
if exists (select 1 from sys.objects where object_id = OBJECT_ID('dbo.fn_GetBitString'))
	DROP FUNCTION dbo.fn_GetBitString
go
CREATE FUNCTION dbo.fn_GetBitString
(
	  @IntValue Int
	, @BitSize tinyInt --1 to 32
)
RETURNS varchar(32)
AS
BEGIN
	DECLARE @BitNum tinyint, @BitString varchar(32)

	IF @BitSize>32 SET @BitSize=32

	SELECT @BitNum=1, @BitString=''
	
	WHILE @BitNum<=@BitSize
	Begin
		SELECT @BitString=
			Cast( (convert(bigint,(@IntValue/power(cast(2 as bigint),@BitNum-1))) % 2)  as char(1))
			-- Cast( dbo.fn_GetBit(@IntValue ,@BitNum)  as char(1))
			+@BitString
		SELECT @BitNum=@BitNum+1
	End 

	RETURN @BitString

END
GO

select dbo.fn_GetBitString(5,4) ,dbo.fn_GetBitString(5,8) ,dbo.fn_GetBitString(5,16)
23 янв 18, 11:43    [21129690]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
дампер
Спасибо, то что надо!

facepalm.jpg
Проще всего сделать рекурсивную функцию и пользоваться ей:

create function dbo.IntToBin (@n int) returns varchar(max) as 
begin 
    declare @res varchar(max);
    if @n < 2 
        set @res = cast(@n as varchar(max)); 
    else 
        set @res = dbo.IntToBin(@n/2) + cast(@n % 2 as varchar(max)); 
    return @res;
end;
go

select dbo.IntToBin(9999);
23 янв 18, 11:44    [21129702]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
дампер
Member [заблокирован]

Откуда:
Сообщений: 55
Minamoto
дампер
Спасибо, то что надо!

facepalm.jpg
Проще всего сделать рекурсивную функцию и пользоваться ей:

create function dbo.IntToBin (@n int) returns varchar(max) as 
begin 
    declare @res varchar(max);
    if @n < 2 
        set @res = cast(@n as varchar(max)); 
    else 
        set @res = dbo.IntToBin(@n/2) + cast(@n % 2 as varchar(max)); 
    return @res;
end;
go

select dbo.IntToBin(9999);



Более универсальная штука, спасибо.
23 янв 18, 11:53    [21129777]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
дампер
Member [заблокирован]

Откуда:
Сообщений: 55
putdoij
http://www.sqlservercentral.com/scripts/Miscellaneous/30722/

use tempdb
go
if exists (select 1 from sys.objects where object_id = OBJECT_ID('dbo.fn_GetBitString'))
	DROP FUNCTION dbo.fn_GetBitString
go
CREATE FUNCTION dbo.fn_GetBitString
(
	  @IntValue Int
	, @BitSize tinyInt --1 to 32
)
RETURNS varchar(32)
AS
BEGIN
	DECLARE @BitNum tinyint, @BitString varchar(32)

	IF @BitSize>32 SET @BitSize=32

	SELECT @BitNum=1, @BitString=''
	
	WHILE @BitNum<=@BitSize
	Begin
		SELECT @BitString=
			Cast( (convert(bigint,(@IntValue/power(cast(2 as bigint),@BitNum-1))) % 2)  as char(1))
			-- Cast( dbo.fn_GetBit(@IntValue ,@BitNum)  as char(1))
			+@BitString
		SELECT @BitNum=@BitNum+1
	End 

	RETURN @BitString

END
GO

select dbo.fn_GetBitString(5,4) ,dbo.fn_GetBitString(5,8) ,dbo.fn_GetBitString(5,16)



Через функцию круто ;)
23 янв 18, 11:53    [21129786]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
iap
Member

Откуда: Москва
Сообщений: 46981
SELECT
 REPLACE(LTRIM(REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
 REPLACE(
          CONVERT(VARCHAR(MAX),CAST(5 AS VARBINARY(MAX)),2)
 ,'0','0000')
 ,'1','0001')
 ,'2','0010')
 ,'3','0011')
 ,'4','0100')
 ,'5','0101')
 ,'6','0110')
 ,'7','0111')
 ,'8','1000')
 ,'9','1001')
 ,'A','1010')
 ,'B','1011')
 ,'C','1100')
 ,'D','1101')
 ,'E','1110')
 ,'F','1111')
 ,'0',' ')),' ','0');
23 янв 18, 12:38    [21130113]     Ответить | Цитировать Сообщить модератору
 Re: Как перевести десятичное число в двоичное?  [new]
Alexander Us
Member

Откуда:
Сообщений: 1130
для (совсем) извращенцев:

declare @val as int = 14-- ;2147483647--;-2147483648
declare @tmp bigint = cast(cast(@val as varbinary(4)) as bigint)

select format
(
 (@tmp/1)%2*1
+(@tmp/2)%2*10
+(@tmp/4)%2*100
+(@tmp/8)%2*1000
+(@tmp/16)%2*10000
+(@tmp/32)%2*100000
+(@tmp/64)%2*1000000
+(@tmp/128)%2*10000000
+(@tmp/256)%2*100000000
+(@tmp/512)%2*1000000000
+(@tmp/1024)%2*10000000000
+(@tmp/2048)%2*100000000000
+(@tmp/4096)%2*1000000000000
+(@tmp/8192)%2*10000000000000
+(@tmp/16384)%2*100000000000000
+(@tmp/32768)%2*1000000000000000
+(@tmp/65536)%2*10000000000000000
+(@tmp/131072)%2*100000000000000000
+(@tmp/262144)%2*1000000000000000000
+(@tmp/524288)%2*10000000000000000000
+(@tmp/1048576)%2*100000000000000000000
+(@tmp/2097152)%2*1000000000000000000000
+(@tmp/4194304)%2*10000000000000000000000
+(@tmp/8388608)%2*100000000000000000000000
+(@tmp/16777216)%2*1000000000000000000000000
+(@tmp/33554432)%2*10000000000000000000000000
+(@tmp/67108864)%2*100000000000000000000000000
+(@tmp/134217728)%2*1000000000000000000000000000
+(@tmp/268435456)%2*10000000000000000000000000000
+(@tmp/536870912)%2*100000000000000000000000000000
+(@tmp/1073741824)%2*1000000000000000000000000000000
+(floor(@tmp/2147483648))%2*10000000000000000000000000000000
,'00000000000000000000000000000000')
23 янв 18, 13:47    [21130476]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить