Hey Guys!
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
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:
1 |
SELECT CONVERT(VARBINARY(8), 16777215) |
ou mesmo utilizando a função de sistema fn_varbintohexstr:
1 |
SELECT master.dbo.fn_varbintohexstr(CONVERT(VARBINARY,CONVERT(INT, 257))) |
Como converter número hexadecimal para inteiro
Utilizando a função abaixo, pode-se rapidamente converter um algarismo hexadecimal para um número inteiro.
1 2 3 4 5 6 7 8 |
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:
1 |
SELECT CONVERT(INT,CONVERT(VARBINARY(4),'FA',2)) |
Como converter número binário para decimal
Utilizando a função abaixo, podemos converter números binários para decimais:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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 |
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..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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 |
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
top!