[SQL] 바이너리 문자열로 SQL 서버 변환 정수
SQL바이너리 문자열로 SQL 서버 변환 정수
바이너리 표현으로 정수로 변환 한 다음 VARCHAR로 저장하는 SQL의 쉬운 방법이 있다면 궁금 해서요.
예를 들어 5 "101"로 변환 될 수와 VARCHAR로 저장.
해결법
-
==============================
1.다음은 함수로 코딩 할 수있다. 당신은 당신의 질문의 요구 사항을 충족하기 위해 맨 앞에 0을 잘라내해야합니다.
다음은 함수로 코딩 할 수있다. 당신은 당신의 질문의 요구 사항을 충족하기 위해 맨 앞에 0을 잘라내해야합니다.
declare @intvalue int set @intvalue=5 declare @vsresult varchar(64) declare @inti int select @inti = 64, @vsresult = '' while @inti>0 begin select @vsresult=convert(char(1), @intvalue % 2)+@vsresult select @intvalue = convert(int, (@intvalue / 2)), @inti=@inti-1 end select @vsresult
-
==============================
2.사실이 평범한 구식 SQL을 사용하여 정말 간단합니다. 그냥 비트 AND 연산을 사용합니다. 나는 약간은하지 간단한 솔루션 (UDF를 invovled하지 않았다) 온라인으로 게시가 있다고 깜짝 놀라게했다. 비트 또는 (데이터가 DOTNET 열거에서 오는) 떨어져 있다면 내 경우에는 정말 확인하고 싶었다.
사실이 평범한 구식 SQL을 사용하여 정말 간단합니다. 그냥 비트 AND 연산을 사용합니다. 나는 약간은하지 간단한 솔루션 (UDF를 invovled하지 않았다) 온라인으로 게시가 있다고 깜짝 놀라게했다. 비트 또는 (데이터가 DOTNET 열거에서 오는) 떨어져 있다면 내 경우에는 정말 확인하고 싶었다.
: 비트 값 이진 문자열 (큰 노동 조합 DB를 통해 작동 번호를 생산 단지 해키 방법입니다 - 따라서 여기에 별도로 함께 당신을 줄 것이다 예입니다
select t.Number , cast(t.Number & 64 as bit) as bit7 , cast(t.Number & 32 as bit) as bit6 , cast(t.Number & 16 as bit) as bit5 , cast(t.Number & 8 as bit) as bit4 , cast(t.Number & 4 as bit) as bit3 , cast(t.Number & 2 as bit) as bit2 ,cast(t.Number & 1 as bit) as bit1 , cast(cast(t.Number & 64 as bit) as CHAR(1)) +cast( cast(t.Number & 32 as bit) as CHAR(1)) +cast( cast(t.Number & 16 as bit) as CHAR(1)) +cast( cast(t.Number & 8 as bit) as CHAR(1)) +cast( cast(t.Number & 4 as bit) as CHAR(1)) +cast( cast(t.Number & 2 as bit) as CHAR(1)) +cast(cast(t.Number & 1 as bit) as CHAR(1)) as binary_string --to explicitly answer the question, on MSSQL without using REGEXP (which would make it simple) ,SUBSTRING(cast(cast(t.Number & 64 as bit) as CHAR(1)) +cast( cast(t.Number & 32 as bit) as CHAR(1)) +cast( cast(t.Number & 16 as bit) as CHAR(1)) +cast( cast(t.Number & 8 as bit) as CHAR(1)) +cast( cast(t.Number & 4 as bit) as CHAR(1)) +cast( cast(t.Number & 2 as bit) as CHAR(1)) +cast(cast(t.Number & 1 as bit) as CHAR(1)) , PATINDEX('%1%', cast(cast(t.Number & 64 as bit) as CHAR(1)) +cast( cast(t.Number & 32 as bit) as CHAR(1)) +cast( cast(t.Number & 16 as bit) as CHAR(1)) +cast( cast(t.Number & 8 as bit) as CHAR(1)) +cast( cast(t.Number & 4 as bit) as CHAR(1)) +cast( cast(t.Number & 2 as bit) as CHAR(1)) +cast(cast(t.Number & 1 as bit) as CHAR(1) ) ) ,99) from (select 1 as Number union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9 union all select 10) as t
이 결과를 생성합니다 :
num bit7 bit6 bit5 bit4 bit3 bit2 bit1 binary_string binary_string_trimmed 1 0 0 0 0 0 0 1 0000001 1 2 0 0 0 0 0 1 0 0000010 10 3 0 0 0 0 0 1 1 0000011 11 4 0 0 0 1 0 0 0 0000100 100 5 0 0 0 0 1 0 1 0000101 101 6 0 0 0 0 1 1 0 0000110 110 7 0 0 0 0 1 1 1 0000111 111 8 0 0 0 1 0 0 0 0001000 1000 9 0 0 0 1 0 0 1 0001001 1001 10 0 0 0 1 0 1 0 0001010 1010
-
==============================
3.이는 일반적인 기본 변환기입니다
이는 일반적인 기본 변환기입니다
http://dpatrickcaldwell.blogspot.com/2009/05/converting-decimal-to-hexadecimal-with.html
넌 할 수있어
select reverse(dbo.ConvertToBase(5, 2)) -- 101
-
==============================
4.나는 단지 출력에 숫자의 하드 수 있도록 제한을 발견하기 때문에 여기에 숀에서 허용 대답에 변화의 비트가 있습니다. 내 일상적인 사용에서, 나는 그것이 더 유용 중 가장 높은 1 자리 만 일어나, 또는 내가 다시를 기대하고있어 얼마나 많은 숫자 지정 찾을 수 있습니다. 그것은 0으로 자동 패드 측면 그래서 그것이 라인까지 8, 16을 것이다, 또는 당신이 원하는 비트의 어떤 수.
나는 단지 출력에 숫자의 하드 수 있도록 제한을 발견하기 때문에 여기에 숀에서 허용 대답에 변화의 비트가 있습니다. 내 일상적인 사용에서, 나는 그것이 더 유용 중 가장 높은 1 자리 만 일어나, 또는 내가 다시를 기대하고있어 얼마나 많은 숫자 지정 찾을 수 있습니다. 그것은 0으로 자동 패드 측면 그래서 그것이 라인까지 8, 16을 것이다, 또는 당신이 원하는 비트의 어떤 수.
Create function f_DecimalToBinaryString ( @Dec int, @MaxLength int = null ) Returns varchar(max) as Begin Declare @BinStr varchar(max) = ''; -- Perform the translation from Dec to Bin While @Dec > 0 Begin Set @BinStr = Convert(char(1), @Dec % 2) + @BinStr; Set @Dec = Convert(int, @Dec /2); End; -- Either pad or trim the output to match the number of digits specified. If (@MaxLength is not null) Begin If @MaxLength <= Len(@BinStr) Begin -- Trim down Set @BinStr = SubString(@BinStr, Len(@BinStr) - (@MaxLength - 1), @MaxLength); End Else Begin -- Pad up Set @BinStr = Replicate('0', @MaxLength - Len(@BinStr)) + @BinStr; End; End; Return @BinStr; End;
-
==============================
5.
declare @i int /* input */ set @i = 42 declare @result varchar(32) /* SQL Server int is 32 bits wide */ set @result = '' while 1 = 1 begin select @result = convert(char(1), @i % 2) + @result, @i = convert(int, @i / 2) if @i = 0 break end select @result
-
==============================
6.
declare @intVal Int set @intVal = power(2,12)+ power(2,5) + power(2,1); With ComputeBin (IntVal, BinVal,FinalBin) As ( Select @IntVal IntVal, @intVal %2 BinVal , convert(nvarchar(max),(@intVal %2 )) FinalBin Union all Select IntVal /2, (IntVal /2) %2, convert(nvarchar(max),(IntVal /2) %2) + FinalBin FinalBin From ComputeBin Where IntVal /2 > 0 ) select FinalBin from ComputeBin where intval = ( select min(intval) from ComputeBin);
-
==============================
7.나는 이진에 진수로 변환하는 다음 ITVF 기능을 사용 그것은 여러가 옵티 마이저에 의해 수행 읽기에 대해 당신은 "걱정"를 필요로하지 않는 인라인 함수 때문이다.
나는 이진에 진수로 변환하는 다음 ITVF 기능을 사용 그것은 여러가 옵티 마이저에 의해 수행 읽기에 대해 당신은 "걱정"를 필요로하지 않는 인라인 함수 때문이다.
CREATE FUNCTION dbo.udf_DecimalToBinary ( @Decimal VARCHAR(32) ) RETURNS TABLE AS RETURN WITH Tally (n) AS ( --32 Rows SELECT TOP 30 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1 FROM (VALUES (0),(0),(0),(0)) a(n) CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0)) b(n) ) , Anchor (n, divisor , Result) as ( SELECT t.N , CONVERT(BIGINT, @Decimal) / POWER(2,T.N) , CONVERT(BIGINT, @Decimal) / POWER(2,T.N) % 2 FROM Tally t WHERE CONVERT(bigint,@Decimal) >= POWER(2,t.n) ) SELECT TwoBaseBinary = '' + (SELECT Result FROM Anchor ORDER BY N DESC FOR XML PATH ('') , TYPE).value('.','varchar(200)') /*How to use*/ SELECT TwoBaseBinary FROM dbo.udf_DecimalToBinary ('1234') /*result -> 10011010010*/
-
==============================
8.나는이 방법은 다른 사람들이 제시하는 다른 아이디어를 많이 단순화 있다고 생각합니다. 그것은 이진 숫자를 생성하는 CTE로 FOR XML을 트릭과 함께 비트 연산을 사용합니다.
나는이 방법은 다른 사람들이 제시하는 다른 아이디어를 많이 단순화 있다고 생각합니다. 그것은 이진 숫자를 생성하는 CTE로 FOR XML을 트릭과 함께 비트 연산을 사용합니다.
DECLARE @my_int INT = 5 ;WITH CTE_Binary AS ( SELECT 1 AS seq, 1 AS val UNION ALL SELECT seq + 1 AS seq, power(2, seq) FROM CTE_Binary WHERE seq < 8 ) SELECT ( SELECT CAST(CASE WHEN B2.seq IS NOT NULL THEN 1 ELSE 0 END AS CHAR(1)) FROM CTE_Binary B1 LEFT OUTER JOIN CTE_Binary B2 ON B2.seq = B1.seq AND @my_int & B2.val = B2.val ORDER BY B1.seq DESC FOR XML PATH('') ) AS val
-
==============================
9.
with t as (select * from (values (0),(1)) as t(c)), t0 as (table t), t1 as (table t), t2 as (table t), t3 as (table t), t4 as (table t), t5 as (table t), t6 as (table t), t7 as (table t), t8 as (table t), t9 as (table t), ta as (table t), tb as (table t), tc as (table t), td as (table t), te as (table t), tf as (table t) select '' || t0.c || t1.c || t2.c || t3.c || t4.c || t5.c || t6.c || t7.c || t8.c || t9.c || ta.c || tb.c || tc.c || td.c || te.c || tf.c as n from t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,ta,tb,tc,td,te,tf order by n limit 1 offset 5
(PostgreSQL을 테스트) 표준 SQL.
-
==============================
10.SQL 서버에, 당신은 아래의 예제처럼 뭔가를 시도 할 수 있습니다 :
SQL 서버에, 당신은 아래의 예제처럼 뭔가를 시도 할 수 있습니다 :
DECLARE @Int int = 321 SELECT @Int ,CONCAT (CAST(@Int & power(2,15) AS bit) ,CAST(@Int & power(2,14) AS bit) ,CAST(@Int & power(2,13) AS bit) ,CAST(@Int & power(2,12) AS bit) ,CAST(@Int & power(2,11) AS bit) ,CAST(@Int & power(2,10) AS bit) ,CAST(@Int & power(2,9) AS bit) ,CAST(@Int & power(2,8) AS bit) ,CAST(@Int & power(2,7) AS bit) ,CAST(@Int & power(2,6) AS bit) ,CAST(@Int & power(2,5) AS bit) ,CAST(@Int & power(2,4) AS bit) ,CAST(@Int & power(2,3) AS bit) ,CAST(@Int & power(2,2) AS bit) ,CAST(@Int & power(2,1) AS bit) ,CAST(@Int & power(2,0) AS bit) ) AS BitString ,CAST(@Int & power(2,15) AS bit) AS BIT15 ,CAST(@Int & power(2,14) AS bit) AS BIT14 ,CAST(@Int & power(2,13) AS bit) AS BIT13 ,CAST(@Int & power(2,12) AS bit) AS BIT12 ,CAST(@Int & power(2,11) AS bit) AS BIT11 ,CAST(@Int & power(2,10) AS bit) AS BIT10 ,CAST(@Int & power(2,9) AS bit) AS BIT9 ,CAST(@Int & power(2,8) AS bit) AS BIT8 ,CAST(@Int & power(2,7) AS bit) AS BIT7 ,CAST(@Int & power(2,6) AS bit) AS BIT6 ,CAST(@Int & power(2,5) AS bit) AS BIT5 ,CAST(@Int & power(2,4) AS bit) AS BIT4 ,CAST(@Int & power(2,3) AS bit) AS BIT3 ,CAST(@Int & power(2,2) AS bit) AS BIT2 ,CAST(@Int & power(2,1) AS bit) AS BIT1 ,CAST(@Int & power(2,0) AS bit) AS BIT0
-
==============================
11.나는 여기에 게임에 조금 늦게 해요 알고 있지만 나는 최근 집계 테이블 활용이를위한 매끄러운 솔루션을 함께했다 (위 @hkravitz 솔루션과 유사합니다.)의 주요 차이점은 내 레버리지가 제가 가상 인덱스를 호출이다 실행 계획에 정렬 연산자없이 결과를 내림차순으로 정렬합니다. 이 게시물의 끝에 포함되는 이용이 달성 dbo.rangeAB.
나는 여기에 게임에 조금 늦게 해요 알고 있지만 나는 최근 집계 테이블 활용이를위한 매끄러운 솔루션을 함께했다 (위 @hkravitz 솔루션과 유사합니다.)의 주요 차이점은 내 레버리지가 제가 가상 인덱스를 호출이다 실행 계획에 정렬 연산자없이 결과를 내림차순으로 정렬합니다. 이 게시물의 끝에 포함되는 이용이 달성 dbo.rangeAB.
참고 오름차순 (행 번호에 대한 "RN"와 같은)이 반환 숫자 0 ~ 30 :
SELECT r.RN FROM dbo.rangeAB(0,30,1,0) AS r ORDER BY r.RN;
그것은 정렬하지 않고 그렇게한다. RN은 ROW_NUMBER ()를 OVER (ORDER BY (SELECT NULL))을 정의 할 수있다. 놀이 가상 지수 - RN으로 정렬하면 다시 정렬을 필요로하지 않습니다.
나는 일종의 그러나 하강을 할 때 나는 일종의을받을 수 있나요
-
==============================
12.이것은 어떤가요...
이것은 어떤가요...
SELECT number_value ,MOD(number_value / 32768, 2) AS BIT15 ,MOD(number_value / 16384, 2) AS BIT14 ,MOD(number_value / 8192, 2) AS BIT13 ,MOD(number_value / 4096, 2) AS BIT12 ,MOD(number_value / 2048, 2) AS BIT11 ,MOD(number_value / 1024, 2) AS BIT10 ,MOD(number_value / 512, 2) AS BIT9 ,MOD(number_value / 256, 2) AS BIT8 ,MOD(number_value / 128, 2) AS BIT7 ,MOD(number_value / 64, 2) AS BIT6 ,MOD(number_value / 32, 2) AS BIT5 ,MOD(number_value / 16, 2) AS BIT4 ,MOD(number_value / 8, 2) AS BIT3 ,MOD(number_value / 4, 2) AS BIT2 ,MOD(number_value / 2, 2) AS BIT1 ,MOD(number_value , 2) AS BIT0 FROM your_table;
from https://stackoverflow.com/questions/127116/sql-server-convert-integer-to-binary-string by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 VARCHAR (날짜)에 16 진수 변환하려면? (0) | 2020.04.12 |
---|---|
[SQL] MySQL의에서 임의의 행을 선택 (0) | 2020.04.11 |
[SQL] 문 "에서"SQL의 LINQ 버전 (0) | 2020.04.11 |
[SQL] PostgreSQL의 쿼리에서 명명 된 상수를 정의 할 수있는 방법이 있습니까? (0) | 2020.04.11 |
[SQL] 공통 테이블 표현식, 왜 세미콜론? (0) | 2020.04.11 |