[sql] 정수를 16 진수로, 16 진수를 정수로 변환

그래서 signal_dataSybase 에서이 쿼리 ( 열이있는 곳) 가 작동 하지만 Microsoft SQL Server에서는 작동하지 않습니다.

HEXTOINT(SUBSTRING((INTTOHEX(signal_data)),5,2)) as Signal

Excel에도 있습니다 ( A1값 이 포함 된 위치 ).

=HEX2DEC(LEFT(DEC2HEX(A1),LEN(DEC2HEX(A1))-2))

누구든지 SQL Server에서이 작업을 수행하는 방법을 알고 있습니까?



답변

INT를 16 진수로 변환 :

SELECT CONVERT(VARBINARY(8), 16777215)

16 진수를 INT로 변환 :

SELECT CONVERT(INT, 0xFFFFFF)

업데이트 2015-03-16

위의 예에는 HEX 값이 정수 리터럴로 제공되는 경우에만 작동한다는 제한이 있습니다. 완전성을 위해 변환 할 값이 16 진수 문자열 (예 : varchar 열에 있음) 인 경우 다음을 사용합니다.

-- If the '0x' marker is present:
SELECT CONVERT(INT, CONVERT(VARBINARY, '0x1FFFFF', 1))

-- If the '0x' marker is NOT present:
SELECT CONVERT(INT, CONVERT(VARBINARY, '1FFFFF', 2))

참고 : 문자열에는 짝수의 16 진수가 포함되어야합니다. 홀수 자릿수는 오류를 생성합니다.

자세한 내용은 CAST 및 CONVERT (Transact-SQL) 의 “바이너리 스타일”섹션에서 확인할 수 있습니다 . SQL Server 2008 이상이 필요하다고 생각합니다.


답변

실제로 내장 함수의 이름은 master.dbo.fn_varbintohexstr입니다.

예를 들면 다음과 같습니다.

SELECT 100, master.dbo.fn_varbintohexstr(100)

당신에게 준다

100 0x00000064


답변

SQL Server는 Excel의 문자열 기반 DEC2HEX, HEX2DEC 함수에 해당합니다.

--Convert INT to hex string:
PRINT CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), 16777215),2) --DEC2HEX

--Convert hex string to INT:
PRINT CONVERT(INT,CONVERT(VARBINARY(4),'00FFFFFF',2)) --HEX2DEC


답변

int를 16 진수로 변환 :

SELECT FORMAT(512+255,'X')


답변

SQL Server 2012 이상에서 사용 가능한 FORMAT 함수를 사용할 수 있습니다.

select FORMAT(10,'x2')

결과 :

0a


답변

traditonal 4 비트 16 진수는 매우 직접적입니다. 16 진수 문자열을 정수로 (값이 FHexString이라는 필드에 저장되어 있다고 가정) :

CONVERT(BIGINT,CONVERT(varbinary(4),
                (SELECT master.dbo.fn_cdc_hexstrtobin(

                    LEFT(FMEID_ESN,8)
                ))
                ))

Integer to Hex String (값이 FInteger라는 필드에 저장되어 있다고 가정) :

(SELECT master.dbo.fn_varbintohexstr(CONVERT(varbinary,CONVERT(int,
                    FInteger
                ))))

특히 인텔 시스템에서 레지스터 공유를 유발하는 비트 크기를 사용하기 시작하면 인텔의 리틀 엔디안 특성으로 인해 레지스터의 높음 및 낮음, 왼쪽 및 권한이 서로 바뀝니다. 예를 들어 varbinary (3)를 사용할 때 6 자 16 진수에 대해 이야기하고 있습니다. 이 경우 비트는 오른쪽에서 왼쪽 “54,32,10”으로 다음 인덱스로 쌍을 이룹니다. 인텔 시스템에서는 “76,54,32,10”이 예상됩니다. 8 개 중 6 개만 사용하므로 스왑을 직접 수행해야합니다. “76,54”는 귀하의 왼쪽으로, “32,10”은 귀하의 오른쪽으로 간주됩니다. 쉼표는 고점과 저점을 구분합니다. 인텔은 최고와 최저를 바꾼 다음 왼쪽과 권리를 바꿉니다. 그래서 변환을하려면 … 한숨, 예를 들어 스스로 바꿔야합니다.

(SELECT master.dbo.fn_replvarbintoint(
                CONVERT(varbinary(3),(SELECT master.dbo.fn_cdc_hexstrtobin(
                    --intel processors, registers are switched, so reverse them 


                    ----second half
                    RIGHT(FHex8,2)+ --0,1 (0 indexed)
                    LEFT(RIGHT(FHex8,4),2)+ -- 2,3 (oindex)
                    --first half
                    LEFT(RIGHT(FHex8,6),2) --4,5

                )))
                ))

조금 복잡해서 8 자 16 진수 (varbinary (4))로 변환을 유지하려고합니다.

요약하면 이것은 귀하의 질문에 대한 답변입니다. 종합적으로.


답변

다음은 정수 값을 16 진수 표현으로 varchar로 변환하는 SQL 서버용 함수입니다. 다른 데이터베이스 유형에 쉽게 적응할 수 있어야합니다.

예를 들면 :

SELECT dbo.ToHex(4095) --> FFF

SQL :

CREATE FUNCTION ToHex(@value int)
RETURNS varchar(50)
AS
BEGIN
    DECLARE @seq char(16)
    DECLARE @result varchar(50)
    DECLARE @digit char(1)
    SET @seq = '0123456789ABCDEF'

    SET @result = SUBSTRING(@seq, (@value%16)+1, 1)

    WHILE @value > 0
    BEGIN
        SET @digit = SUBSTRING(@seq, ((@value/16)%16)+1, 1)

        SET @value = @value/16
        IF @value <> 0 SET @result = @digit + @result
    END

    RETURN @result
END
GO