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:

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:

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:

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:

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
Comentários (0)
Carregando comentários…