¡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:

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:

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:

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:

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