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="">10>
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:
En el siguiente enlace podrás descargar el script
0 Comentarios