sábado, 18 de julio de 2009

Conversiones decimal a binario, octal y hexadecimal en SQL Server

En esta ocasión veremos una función simple para convertir numeros decimales a otras bases como son, binario, octal y hexadecimal.


Codigo T-SQLCREATE FUNCTION dbo.udf_decimal_a_base(@N bigint, @Base int)

RETURNS varchar(200)

AS

BEGIN

-- Declaramos las variables a utilizar

DECLARE @Result varchar(200),

@NumChars varchar(50)

-- Inicializamos las variables

SET @NumChars = '0123456789ABCDEF'

SET @Result = ''

-- Validamos la base a convertir

IF ( (@Base = 2) OR (@Base = 8) OR (@Base = 10) OR (@Base = 16) )

BEGIN

-- Ejecutamos el ciclo

WHILE ( @N > 0 )

BEGIN

-- Realizamos la conversion

SET @Result = SUBSTRING(@NumChars,(@N % @Base) + 1,1) + @Result

-- Disminuimos N, dividiendola entre la base

SET @N = FLOOR(@N / @Base)

END

END

-- Retornamos el resultado

RETURN @Result

END

GO



El uso de esta funcion quedaría:

SELECT dbo.udf_decimal_a_base(4564,2)

SELECT dbo.udf_decimal_a_base(4564,8)

SELECT dbo.udf_decimal_a_base(4564,16)

Codigo T-SQL

Dandonos como resultados:


Resultados T-SQL---------------------------------------------------------------------------------------------
1000111010100

(1 filas afectadas)

---------------------------------------------------------------------------------------------
10724

(1 filas afectadas)

---------------------------------------------------------------------------------------------
11D4

(1 filas afectadas)



Esta función puede incluirse dentro de Stored Procedures y tener múltiples aplicaciones, espero que les sirva. Hasta la próxima.

No hay comentarios:

Publicar un comentario