¡Hola, chicos!
Buenas noches.

En este post demostraré cómo realizar conversiones entre números decimales (base 10) a números hexadecimales (base 16) y viceversa usando funciones simples de SQL Server para realizar estas tareas y al final, proporcionaré una función muy interesante que te permite convertir un número en base 10 a otro número en cualquier base (base 2 a 99)

Cómo convertir un número entero a hexadecimal

Usando la siguiente función, puede convertir fácilmente un número entero a un dígito 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

o podemos usar un CONVERTIR simple, pero eso no trae el resultado con el formato que me gustaría:

SELECT CONVERT(VARBINARY(8), 16777215)

o incluso usando la función del sistema fn_varbintohexstr:

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

Ejemplos de uso:

SQL Server - Inteiro para Hexadecimal
SQL Server: entero a hexadecimal

Cómo convertir un número hexadecimal a entero

Con la siguiente función, puede convertir rápidamente un dígito hexadecimal en un número entero.

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

También podemos realizar esta tarea con otro CONVERT simple:

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

Ejemplo de uso:

SQL Server - Hexadecimal para Inteiro 2
Servidor SQL: hexadecimal a entero 2

Cómo convertir un número binario a decimal

Usando la siguiente función, podemos convertir números binarios a decimales:

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

Ejemplos de uso:

SQL Server - Binário para Decimal
Servidor SQL: binario a decimal

Cómo convertir un número decimal a una base genérica

Finalmente, esta es la solución final para convertir números decimales a diferentes bases, ya que la función permite convertir a binario, 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

Ejemplos de uso:

SQL Server - Decimal para Binário Hexadecimal Octal
SQL Server: decimal a binario hexadecimal octal

¡Gracias por visitarnos y hasta la próxima!

Cómo convertir un número entero a hexadecimal en SQL Server cómo convertir un número binario octal hexadecimal

Cómo convertir un número entero a hexadecimal en SQL Server cómo convertir un número binario octal hexadecimal