Olá pessoal!
Boa noite.

Neste post vou demonstrar como realizar conversões entre números decimais (base 10) para números hexadecimais (base 16) e vice-versa utilizando funções simples do SQL Server para realizar essas tarefas e no final, vou disponibilizar uma função bem interessante que permite converter um número na base 10 para outro número de qualquer base (base 2 a 99)

Como converter número inteiro para hexadecimal

Utilizando a função abaixo, pode-se facilmente converter um número inteiro para um algarismo hexadecimal.

CREATE FUNCTION dbo.fncInteiro_Para_Hexadecimal(
    @Numero INT
)
RETURNS VARCHAR(50)
AS
BEGIN


    DECLARE 
        @Sequencia VARCHAR(16) = '0123456789ABCDEF',
        @Resultado VARCHAR(50),
        @Digito CHAR(1)
    
    
    SET @Resultado = SUBSTRING(@Sequencia, (@Numero % 16) + 1, 1)

    WHILE (@Numero > 0)
    BEGIN
    
        SET @Digito = SUBSTRING(@Sequencia, ((@Numero / 16) % 16) + 1, 1)

        SET @Numero = @Numero / 16
        IF (@Numero != 0 )
            SET @Resultado = @Digito + @Resultado
            
    END 


    RETURN @Resultado

    
END

ou podemos utilizar um simples CONVERT, mas que não traz o resultado com a formatação que eu gostaria:

SELECT CONVERT(VARBINARY(8), 16777215)

ou mesmo utilizando a função de sistema fn_varbintohexstr:

SELECT master.dbo.fn_varbintohexstr(CONVERT(VARBINARY,CONVERT(INT, 257)))

Exemplos de uso:

SQL Server - Inteiro para Hexadecimal
SQL Server - Inteiro para Hexadecimal

Como converter número hexadecimal para inteiro

Utilizando a função abaixo, pode-se rapidamente converter um algarismo hexadecimal para um número inteiro.

CREATE FUNCTION [dbo].[fncHexadecimal_Para_Inteiro](@hex VARCHAR(64))
RETURNS varchar(50)
AS
BEGIN

    RETURN CAST(CONVERT(VARBINARY,'0x'+RIGHT('00000000'+REPLACE(@hex,'x',''),8),1) AS INT)
    
END

Podemos também realizar essa tarefa com outro simples CONVERT:

SELECT CONVERT(INT,CONVERT(VARBINARY(4),'FA',2))

Exemplo de utilização:

SQL Server - Hexadecimal para Inteiro 2
SQL Server - Hexadecimal para Inteiro 2

Como converter número binário para decimal

Utilizando a função abaixo, podemos converter números binários para decimais:

CREATE FUNCTION [dbo].[fncBinario_para_Decimal] (
    @Numero_Binario varchar(255)
)
RETURNS BIGINT
AS
BEGIN

    DECLARE @Contador TINYINT = 1
    DECLARE @Tamanho TINYINT = LEN(@Numero_Binario)
    DECLARE @Resultado BIGINT = CAST(SUBSTRING(@Numero_Binario, @Tamanho, 1) AS BIGINT)

    WHILE(@Contador < @Tamanho) 
    BEGIN
        
        SET @Resultado = @Resultado + POWER(CAST(SUBSTRING(@Numero_Binario, @Tamanho - @Contador, 1) * 2 AS BIGINT), @Contador)
        SET @Contador = @Contador + 1
        
    END

    
    RETURN @Resultado	
    

END

Exemplos de utilização:

SQL Server - Binário para Decimal
SQL Server - Binário para Decimal

Como converter um número decimal para uma base genérica

Por fim, essa é a solução final para conversão de números decimais para diferentes bases, pois a função permite realizar a conversão para binário, hexadecimal, octal, etc..

CREATE FUNCTION dbo.fncConverte_Numero_Base_Generica (
    @Numero AS BIGINT,
    @Base AS INT
)
RETURNS VARCHAR(MAX)
AS
BEGIN

    DECLARE
        @Caracteres VARCHAR(99) = '0123456789abcdefghijklmnopqrstuvwxyz!@#$%&*()_-+={}[]^~:;?/\<>|.,¹²³£¢¬º°¨"áéíóúàèìòùãõâêîôûäëïöüñç',
        @Resultado VARCHAR(MAX) = ''

    
    IF (@Numero < 0 OR @Base < 2 OR @Base > 99)
       RETURN NULL

    
    WHILE (@Numero > 0)
    BEGIN
    
      SELECT
            @Resultado = SUBSTRING(@Caracteres, @Numero % @Base + 1, 1) + @Resultado,
            @Numero = @Numero / @Base;
            
    END

    
    RETURN UPPER(@Resultado)
    

END

Exemplos de utilização:

SQL Server - Decimal para Binário Hexadecimal Octal
SQL Server - Decimal para Binário Hexadecimal Octal

Obrigado pela visita e até a próxima!

Como converter número inteiro para Hexadecimal no SQL Server how to convert number hex octal binário binary

Como converter número inteiro para Hexadecimal no SQL Server how to convert number hex octal binário binary