Conversion de Numeros a letras en SQL Server

 Conversión de Números a letras en SQL Server

En muchas ocasiones nos vemos en la necesidad de convertir una cantidad monetaria en letras con el objetivo de mostrarlo ya sea en un reporte o al querer plasmarlo en un formato de impresión de una factura. a continuación vamos a crear una función que nos permita convertir una cantidad numérica a letras.

A continuación vamos a mostrar el código de la función:

CREATE FUNCTION [dbo].[Convertir_CantidadMonetaria]
(
	@Numero numeric(18,2)
)
RETURNS Varchar(512)
AS
BEGIN
   --Declaramos las variables que va a interactuar en la conversion
	DECLARE @lnEntero INT,
	@lcRetorno VARCHAR(512),
	@lnTerna INT,
	@lcMiles VARCHAR(512),
	@lcCadena VARCHAR(512),
	@lnUnidades INT,
	@lnDecenas INT,
	@lnCentenas INT,
	@lnFraccion INT,
	@dec INT
 
	SELECT @lnEntero =CAST(@Numero AS INT),@lnFraccion =(@Numero -@lnEntero)*100,@lcRetorno ='',@lnTerna =1
	WHILE @lnEntero >0
BEGIN 
	SELECT @lcCadena =''
	SELECT @lnUnidades =@lnEntero %10
	SELECT @lnEntero =CAST(@lnEntero/10 AS INT)
	SELECT @lnDecenas =@lnEntero %10
	SELECT @lnEntero =CAST(@lnEntero/10 AS INT)
	SELECT @lnCentenas =@lnEntero %10
	SELECT @lnEntero =CAST(@lnEntero/10 AS INT)
	SELECT @lcCadena =
		CASE --Unidades
			WHEN @lnUnidades =1 AND @lnTerna =1 THEN 'UNO '+@lcCadena
			WHEN @lnUnidades =1 AND @lnTerna <>1 THEN 'UN '+@lcCadena
			WHEN @lnUnidades =2 THEN 'DOS '+@lcCadena
			WHEN @lnUnidades =3 THEN 'TRES '+@lcCadena
			WHEN @lnUnidades =4 THEN 'CUATRO '+@lcCadena
			WHEN @lnUnidades =5 THEN 'CINCO '+@lcCadena
			WHEN @lnUnidades =6 THEN 'SEIS '+@lcCadena
			WHEN @lnUnidades =7 THEN 'SIETE '+@lcCadena
			WHEN @lnUnidades =8 THEN 'OCHO '+@lcCadena
			WHEN @lnUnidades =9 THEN 'NUEVE '+@lcCadena
			ELSE @lcCadena
		END 
	SELECT @lcCadena =
		CASE --Decenas
			WHEN @lnDecenas =1 THEN
			CASE @lnUnidades
			WHEN 0 THEN 'DIEZ '
			WHEN 1 THEN 'ONCE '
			WHEN 2 THEN 'DOCE '
			WHEN 3 THEN 'TRECE '
			WHEN 4 THEN 'CATORCE '
			WHEN 5 THEN 'QUINCE '
			ELSE 'DIECI'+@lcCadena
		END
		WHEN @lnDecenas =2 AND @lnUnidades =0 THEN 'VEINTE '+@lcCadena
		WHEN @lnDecenas =2 AND @lnUnidades <>0 THEN 'VEINTI'+@lcCadena
		WHEN @lnDecenas =3 AND @lnUnidades =0 THEN 'TREINTA '+@lcCadena
		WHEN @lnDecenas =3 AND @lnUnidades <>0 THEN 'TREINTA Y '+@lcCadena
		WHEN @lnDecenas =4 AND @lnUnidades =0 THEN 'CUARENTA '+@lcCadena
		WHEN @lnDecenas =4 AND @lnUnidades <>0 THEN 'CUARENTA Y '+@lcCadena
		WHEN @lnDecenas =5 AND @lnUnidades =0 THEN 'CINCUENTA '+@lcCadena
		WHEN @lnDecenas =5 AND @lnUnidades <>0 THEN 'CINCUENTA Y '+@lcCadena
		WHEN @lnDecenas =6 AND @lnUnidades =0 THEN 'SESENTA '+@lcCadena
		WHEN @lnDecenas =6 AND @lnUnidades <>0 THEN 'SESENTA Y '+@lcCadena
		WHEN @lnDecenas =7 AND @lnUnidades =0 THEN 'SETENTA '+@lcCadena
		WHEN @lnDecenas =7 AND @lnUnidades <>0 THEN 'SETENTA Y '+@lcCadena
		WHEN @lnDecenas =8 AND @lnUnidades =0 THEN 'OCHENTA '+@lcCadena
		WHEN @lnDecenas =8 AND @lnUnidades <>0 THEN 'OCHENTA Y '+@lcCadena
		WHEN @lnDecenas =9 AND @lnUnidades =0 THEN 'NOVENTA '+@lcCadena
		WHEN @lnDecenas =9 AND @lnUnidades <>0 THEN 'NOVENTA Y '+@lcCadena
		ELSE @lcCadena
		END 
	SELECT @lcCadena =
		CASE --Centenas
			WHEN @lnCentenas =1 AND @lnUnidades =0 AND @lnDecenas =0 THEN 'CIEN '+@lcCadena
			WHEN @lnCentenas =1 AND NOT(@lnUnidades =0 AND @lnDecenas =0)THEN'CIENTO '+@lcCadena
			WHEN @lnCentenas =2 THEN 'DOSCIENTOS '+@lcCadena
			WHEN @lnCentenas =3 THEN 'TRESCIENTOS '+@lcCadena
			WHEN @lnCentenas =4 THEN 'CUATROCIENTOS '+@lcCadena
			WHEN @lnCentenas =5 THEN 'QUINIENTOS '+@lcCadena
			WHEN @lnCentenas =6 THEN 'SEISCIENTOS '+@lcCadena
			WHEN @lnCentenas =7 THEN 'SETECIENTOS '+@lcCadena
			WHEN @lnCentenas =8 THEN 'OCHOCIENTOS '+@lcCadena
			WHEN @lnCentenas =9 THEN 'NOVECIENTOS '+@lcCadena
			ELSE @lcCadena
		END 
	SELECT @lcCadena =
		CASE--Ternas
			WHEN @lnTerna =1 THEN @lcCadena
			WHEN @lnTerna =2 AND (@lnUnidades +@lnDecenas +@lnCentenas <>0)THEN @lcCadena +' MIL '
			WHEN @lnTerna =3 AND (@lnUnidades +@lnDecenas +@lnCentenas <>0)AND
			@lnUnidades =1 AND @lnDecenas =0 AND @lnCentenas =0 THEN @lcCadena +' MILLON '
			WHEN @lnTerna =3 AND (@lnUnidades +@lnDecenas +@lnCentenas <>0)AND
			NOT (@lnUnidades =1 AND @lnDecenas =0 AND @lnCentenas =0)THEN @lcCadena+' MILLONES '
			WHEN @lnTerna =4 AND (@lnUnidades +@lnDecenas +@lnCentenas <>0)THEN @lcCadena +' MIL MILLONES '
			ELSE ''
		END 
	--print @lcCadena
	SELECT @lcRetorno =@lcCadena +@lcRetorno
	SELECT @lnTerna =@lnTerna +1
	END 
	SELECT @dec =(@Numero -CONVERT(Int,@Numero))*100
	If @dec >0
		If @dec <10 0="" centavos="" con="" cordobas.="" dec="" else="" end="" go="" lcretorno="" pre="" return="" rim="" rtrim="" select="">

Ahora vamos a Probar la función en SQL Server Management Studio. Para ejecutar la función debemos hacerlo de la siguiente manera.(Talvez te puede interesar: Creación de Funciones en SQL Server)

select [dbo].[Convertir_CantidadMonetaria] (563.20) AS Numero_Letra 

Ejecutemos la función:


Para mi ubicación(Nicaragua) y dado el tipo de moneda el resultado mostrado del monto convertido en letra será en córdobas que es la moneda que se usa en mi país.

En el siguiente enlace podrás descargar el script 


Publicar un comentario

0 Comentarios