Funcion monto escrito en SQL

 

CREATE FUNCTION [dbo].[UDF_MontoEscrito]

(

       @Numero decimal(18,2)

)

RETURNS nvarchar(512)

AS

BEGIN

      DECLARE @lnEntero INT,

  @lcRetorno VARCHAR(512),

  @lnTerna INT,

  @lcMiles VARCHAR(512),

  @lcCadena VARCHAR(512),

  @lnUnidades INT,

  @lnDecenas INT,

  @lnCentenas INT,

  @lnFraccion 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

      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

      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

      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

      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

 

 

    SELECT @lcRetorno = @lcCadena  + @lcRetorno

    SELECT @lnTerna = @lnTerna + 1

 

  END

 

  IF @lnTerna = 1 

    SELECT @lcRetorno = ‘CERO’

 

  set @lcRetorno = RTRIM(@lcRetorno) + ‘ CON ‘ + LTRIM(STR(@lnFraccion,2)) + ‘/100’

     

      RETURN @lcRetorno

END

 

Se usaria como cualquier funcion escalar:

select IdFactura, dbo.UDF_MontoEscrito(Neto) as Neto from Factura

3 Respuestas a “Funcion monto escrito en SQL

  1. Muchas gracias por tu contribución, aun no lo he probado pero espero darle mucha utilidad. Saludos!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s