복붙노트

[SQL] 정수 진수와 진수로 정수로 변환

SQL

정수 진수와 진수로 정수로 변환

나는이 쿼리 작업이 그래서베이스에서 (signal_data는 열입니다)하지만, 마이크로 소프트 SQL 서버에서 작동하지 않습니다 :

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

또한 (A1이 값을 포함) Excel에서있다 :

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

누구 알고 나는 SQL 서버에서이 작업을 수행 할 않는 방법?

해결법

  1. ==============================

    1.진수를 INT로 변환 :

    진수를 INT로 변환 :

    SELECT CONVERT(VARBINARY(8), 16777215)
    

    INT에 진수로 변환 :

    SELECT CONVERT(INT, 0xFFFFFF)
    

    위의 예는 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을 믿는 이상이 필요합니다.

  2. ==============================

    2.사실, 내장 기능 master.dbo.fn_varbintohexstr 지정됩니다.

    사실, 내장 기능 master.dbo.fn_varbintohexstr 지정됩니다.

    따라서, 예를 들어 :

    SELECT 100, master.dbo.fn_varbintohexstr(100)
    

    당신을 제공합니다

    (100) 0x00000064

  3. ==============================

    3.Excel의 문자열 기반 DEC2HEX, HEX2DEC 기능에 SQL 서버 등가물 :

    Excel의 문자열 기반 DEC2HEX, HEX2DEC 기능에 SQL 서버 등가물 :

    --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
    
  4. ==============================

    4.진수를 INT로 변환 :

    진수를 INT로 변환 :

    SELECT FORMAT (512 + 255, 'X')

  5. ==============================

    5.그것은 SQL Server에서 위의 2012 사용할 수있는 기능 형식을 사용하여 가능하다

    그것은 SQL Server에서 위의 2012 사용할 수있는 기능 형식을 사용하여 가능하다

    select FORMAT(10,'x2')
    

    결과 :

    0a
    
  6. ==============================

    6.기존의 4 비트 진수 꽤 직접입니다. 정수에 진수 문자열 (가정 값이 xString라는 필드에 저장됩니다)

    기존의 4 비트 진수 꽤 직접입니다. 정수에 진수 문자열 (가정 값이 xString라는 필드에 저장됩니다)

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

    진수 문자열을 정수 (가정 값이 FInteger라는 필드에 저장됩니다)

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

    주의하는 것이 중요 당신이 특히 인텔 시스템에서, 원인 레지스터를 공유하는 것이 비트 크기를 사용하기 시작하면, 레지스터에 높고 낮은과 왼쪽과 권리 인해 인텔의 리틀 엔디안 특성으로 교체 될 것입니다. VARBINARY (3)을 사용하는 경우 예를 들어, 우리는 6 자 진수에 대해 얘기하고. 이 경우, 비트는 오른쪽에서 "54,32,10"왼쪽으로 다음 인덱스로 짝. 인텔 시스템에서는 "76,54,32,10"을 기대. 만 8의 6을 사용하고 있기 때문에, 당신은 스왑에게 자신을 기억해야합니다. "76,54"왼쪽으로 자격을하고 "32, 10"권리로 인정됩니다. 쉼표는 높고 낮은 분리한다. 인텔은 높은 기온, 다음 왼쪽과 권리를 교환합니다. 그래서 변환을 수행하는 ... 한숨, 당신은 그들에게 예를 들어 자신을 교환 할 수있어, 다음과 같은 변환하는 8 자리 16 진수의 첫 6 :

    (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)) 내 변환을 유지하려고 것이다, 그래서 그것은 조금 복잡합니다.

    요약하면,이 귀하의 질문에 대답해야한다. 종합적.

  7. ==============================

    7.여기 VARCHAR로서 16 진수 표현으로 변환하는 정수 값이 SQL 서버의 함수이다. 다른 데이터베이스 유형에 적응하기 쉬워야한다

    여기 VARCHAR로서 16 진수 표현으로 변환하는 정수 값이 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
    
  8. ==============================

    8.

    Declare @Dato xml
    Set @Dato = Convert(xml, '<dato>FF</dato>')
    Select Cast( rw.value( 'xs:hexBinary( text()[1])' , 'varbinary(max)' ) as int ) From @Dato.nodes('dato') as T(rw)
    
  9. ==============================

    9.사용 master.dbo.fnbintohexstr (16777215)는 VARCHAR 표현으로 변환합니다.

    사용 master.dbo.fnbintohexstr (16777215)는 VARCHAR 표현으로 변환합니다.

  10. ==============================

    10.Maksym Kozlenko에 의한 대답은 좋은 약간 코드 형식으로 숫자 값을 인코딩 처리하기 위해 수정 될 수 있습니다. 예를 들면 :

    Maksym Kozlenko에 의한 대답은 좋은 약간 코드 형식으로 숫자 값을 인코딩 처리하기 위해 수정 될 수 있습니다. 예를 들면 :

    CREATE FUNCTION [dbo].[IntToAlpha](@Value int)
    RETURNS varchar(30)
    AS
    BEGIN
        DECLARE @CodeChars varchar(100) 
        SET @CodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        DECLARE @CodeLength int = 26
        DECLARE @Result varchar(30) = ''
        DECLARE @Digit char(1)
    
        SET @Result = SUBSTRING(@CodeChars, (@Value % @CodeLength) + 1, 1)
        WHILE @Value > 0
        BEGIN
            SET @Digit = SUBSTRING(@CodeChars, ((@Value / @CodeLength) % @CodeLength) + 1, 1)
            SET @Value = @Value / @CodeLength
            IF @Value <> 0 SET @Result = @Digit + @Result
        END 
    
        RETURN @Result
    END
    

    그래서, 1 억 5000 만 같은 큰 숫자는 단지 6 자 (150000000 = "MQGJMU을")가된다

    당신은 또한 암호화 장치로 다른 시퀀스에 다른 문자를 사용할 수 있습니다. 또는 암호화를위한 염장 방법으로 코드 문자와 문자 사용의 길이를 전달합니다.

    그리고 역 :

    CREATE FUNCTION [dbo].[AlphaToInt](@Value varchar(7))
    RETURNS int
    AS
    BEGIN
        DECLARE @CodeChars varchar(100) 
        SET @CodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
        DECLARE @CodeLength int = 26
        DECLARE @Digit char(1)
        DECLARE @Result int = 0
        DECLARE @DigitValue int
        DECLARE @Index int = 0
        DECLARE @Reverse varchar(7)
        SET @Reverse = REVERSE(@Value)
    
        WHILE @Index < LEN(@Value)
        BEGIN
            SET @Digit = SUBSTRING(@Reverse, @Index + 1, 1)
            SET @DigitValue = (CHARINDEX(@Digit, @CodeChars) - 1) * POWER(@CodeLength, @Index)
            SET @Result = @Result + @DigitValue
            SET @Index = @Index + 1
        END 
        RETURN @Result
    
  11. ==============================

    11.주어진:

    주어진:

    declare @hexStr varchar(16), @intVal int
    

    IntToHexStr :

    select @hexStr = convert(varbinary, @intVal, 1)
    

    HexStrToInt :

    declare
        @query varchar(100),
        @parameters varchar(50)
    
    select
        @query = 'select @result = convert(int,' + @hb + ')',
        @parameters = '@result int output'
    
    exec master.dbo.Sp_executesql @query, @parameters, @intVal output
    
  12. ==============================

    12.Maksym Kozlenko 좋은 솔루션을 가지고 있으며, 다른 사람은 그것의 잠재력을 잠금 해제 가까이 오지하지만 당신은 문자의 순서를 정의하고, 자료로의 길이를 사용할 수있는 실현에 완전히 그리워. 어느 나는 그의 해결책이 약간 수정 된 버전을 좋아하는 이유는 기본 16, 또는 기본 (17), 등을 위해 일 수 있기 때문이다

    Maksym Kozlenko 좋은 솔루션을 가지고 있으며, 다른 사람은 그것의 잠재력을 잠금 해제 가까이 오지하지만 당신은 문자의 순서를 정의하고, 자료로의 길이를 사용할 수있는 실현에 완전히 그리워. 어느 나는 그의 해결책이 약간 수정 된 버전을 좋아하는 이유는 기본 16, 또는 기본 (17), 등을 위해 일 수 있기 때문이다

    예를 들어, 문자와 숫자를 원하지만 0의처럼 보이는 1 개의와 O의처럼 보이는에 대한처럼하지 않으면 어떻게. 당신은 어떤 순서이 방법을 정의 할 수 있습니다. 아래는 I 및 O에 "개질 기부 (34)"를 생성하도록 스킵는 "베이스 (36)"의 형태이다. 대신 진수로 실행하는 육각 라인을 취소합니다 언급.

    declare @value int = 1234567890
    
    DECLARE @seq varchar(100) = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ' -- modified base 34
    --DECLARE @seq varchar(100) = '0123456789ABCDEF' -- hex
    DECLARE @result varchar(50)
    DECLARE @digit char(1)
    DECLARE @baseSize int = len(@seq)
    DECLARE @workingValue int = @value
    
    SET @result = SUBSTRING(@seq, (@workingValue%@baseSize)+1, 1)
    
    WHILE @workingValue > 0
    BEGIN
        SET @digit = SUBSTRING(@seq, ((@workingValue/@baseSize)%@baseSize)+1, 1)
    
        SET @workingValue = @workingValue/@baseSize
        IF @workingValue <> 0 SET @result = @digit + @result
    END 
    
    select @value as Value, @baseSize as BaseSize, @result as Result
    

    또한 개인적인 선호도 조사 결과, 다음 작업 값의 복사본에서 작업을 작업 값을 통해 값을 이동합니다.

    다음 시퀀스의 길이로 정의 염기, 모든 시퀀스에 대해, 변환을 반전 추가된다.

    declare @value varchar(50) = 'T5URAA'
    
    DECLARE @seq varchar(100) = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ' -- modified base 34
    --DECLARE @seq varchar(100) = '0123456789ABCDEF' -- hex
    DECLARE @result int = 0
    DECLARE @digit char(1)
    DECLARE @baseSize int = len(@seq)
    DECLARE @workingValue varchar(50) = @value
    
    DECLARE @PositionMultiplier int = 1
    DECLARE @digitPositionInSequence int = 0
    
    WHILE len(@workingValue) > 0
    BEGIN
        SET @digit = right(@workingValue,1)
        SET @digitPositionInSequence = CHARINDEX(@digit,@seq)
        SET @result = @result + ( (@digitPositionInSequence -1) * @PositionMultiplier)
    
        --select @digit, @digitPositionInSequence, @PositionMultiplier, @result
    
        SET @workingValue = left(@workingValue,len(@workingValue)-1)
        SET @PositionMultiplier = @PositionMultiplier * @baseSize
    END 
    
    select @value as Value, @baseSize as BaseSize, @result as Result
    
  13. ==============================

    13.

    IIF(Fields!HIGHLIGHT_COLOUR.Value="","#FFFFFF","#" & hex(Fields!HIGHLIGHT_COLOUR.Value) & StrDup(6-LEN(hex(Fields!HIGHLIGHT_COLOUR.Value)),"0"))
    

    글꼴 색상 표현으로 나를 위해 노력하고 있습니다

  14. ==============================

    14.INT에 진수 문자열로 변환하기 위해, 나는 과거에 이것을 사용했습니다. 그것은 사실 INT 모든 기반을 변환 할 수정할 수 있습니다 (진수, 바이너리, 무엇이든)

    INT에 진수 문자열로 변환하기 위해, 나는 과거에 이것을 사용했습니다. 그것은 사실 INT 모든 기반을 변환 할 수정할 수 있습니다 (진수, 바이너리, 무엇이든)

    Declare @Str varchar(200)
    Set @str = 'F000BE1A'
    
    Declare @ndx int
    Set @ndx = Len(@str)
    Declare @RunningTotal  BigInt
    Set @RunningTotal = 0
    
    While @ndx > 0
    Begin
        Declare @Exponent BigInt
        Set @Exponent = Len(@Str) - @ndx
    
        Set @RunningTotal = @RunningTotal + 
    
        Power(16 * 1.0, @Exponent) *
        Case Substring(@str, @ndx, 1)
            When '0' then 0
            When '1' then 1
            When '2' then 2 
            When '3' then 3
            When '4' then 4
            When '5' then 5
            When '6' then 6
            When '7' then 7
            When '8' then 8
            When '9' then 9
            When 'A' then 10
            When 'B' then 11
            When 'C' then 12
            When 'D' then 13
            When 'E' then 14
            When 'F' then 15
        End
        Set @ndx = @ndx - 1
    End
    
    Print @RunningTotal
    
  15. ==============================

    15.다음은 두 가지 기능은 다음과 같습니다 dbo.HexToInt 및 dbo.IntToHex, 나는 같은 변환을 사용 :

    다음은 두 가지 기능은 다음과 같습니다 dbo.HexToInt 및 dbo.IntToHex, 나는 같은 변환을 사용 :

    if OBJECT_ID('dbo.HexToInt') is not null
        drop function dbo.HexToInt
    GO
    create function dbo.HexToInt (@chars varchar(max))
    returns int
    begin
        declare @char varchar(1), @len int, @i int, @r int, @tmp int, @pow int
        set @chars = RTRIM(LTRIM(@chars))
        set @len = LEN(@chars)
        set @i = 1
        set @r = 0
        while @i <= @len
        begin
            set @pow = @len - @i
            set @char = SUBSTRING(@chars, @i, 1)
            if @char = '0'
                set @tmp = 0
            else if @char = '1'
                set @tmp = 1
            else if @char = '2'
                set @tmp = 2
            else if @char = '3'
                set @tmp = 3
            else if @char = '4'
                set @tmp = 4
            else if @char = '5'
                set @tmp = 5
            else if @char = '6'
                set @tmp = 6
            else if @char = '7'
                set @tmp = 7
            else if @char = '8'
                set @tmp = 8
            else if @char = '9'
                set @tmp = 9
            else if @char = 'A'
                set @tmp = 10
            else if @char = 'B'
                set @tmp = 11
            else if @char = 'C'
                set @tmp = 12
            else if @char = 'D'
                set @tmp = 13
            else if @char = 'E'
                set @tmp = 14
            else if @char = 'F'
                set @tmp = 15
            set @r = @r + @tmp * POWER(16,@pow)
            set @i = @i + 1     
        end
        return @r
    end
    

    그리고 두 번째 :

    if OBJECT_ID('dbo.IntToHex') is not null
        drop function dbo.IntToHex
    GO
    create function dbo.IntToHex (@val int)
    returns varchar(max)
    begin
        declare @r varchar(max), @tmp int, @v1 int, @v2 int, @char varchar(1)
        set @tmp = @val
        set @r = ''
        while 1=1
        begin
            set @v1 = @tmp / 16
            set @v2 = @tmp % 16
            if @v2 = 0
                set @char = '0'
            else if @v2 = 1
                set @char = '1'
            else if @v2 = 2
                set @char = '2'
            else if @v2 = 3
                set @char = '3'
            else if @v2 = 4
                set @char = '4'
            else if @v2 = 5
                set @char = '5'
            else if @v2 = 6
                set @char = '6'
            else if @v2 = 7
                set @char = '7'
            else if @v2 = 8
                set @char = '8'
            else if @v2 = 9
                set @char = '9'
            else if @v2 = 10
                set @char = 'A'
            else if @v2 = 11
                set @char = 'B'
            else if @v2 = 12
                set @char = 'C'
            else if @v2 = 13
                set @char = 'D'
            else if @v2 = 14
                set @char = 'E'
            else if @v2 = 15
                set @char = 'F'
            set @tmp = @v1 
            set @r = @char + @r
            if @tmp = 0
                break
        end
        return @r
    end
    
  16. from https://stackoverflow.com/questions/703019/convert-integer-to-hex-and-hex-to-integer by cc-by-sa and MIT license