Codigo

31/10/2007 - 23:57 por leonardo.babines | Informe spam
Hola buenas tardes

Estoy trabajando con SQL Server 2000, y necesito un procedimiento que me
permita hacer una conversion de una cantidad monetarias de numeros a Letras
ejemplo
$3500.20 M.N = (Tres mil quinientos pesos 20/100 M.N)


Este codigo se va ejecutar en cuanto se haga la actualizacion de un campo de
una base de datos

Alguna sugerencia.
Gracias por su ayuda.

Preguntas similare

Leer las respuestas

#1 Isaias
01/11/2007 - 00:03 | Informe spam
IF EXISTS (SELECT * FROM sysobjects WHERE id =
object_id(N'[dbo].[usp_Num2Let]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[usp_Num2Let]
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON
GO
/****** Object: Stored Procedure dbo.sp_Num2Let Script Date: 10/05/02
24:00:00 ******/
/****** Autor: Luis Maria Guayan MVP Visual FoxPro ******/
CREATE PROCEDURE usp_Num2Let @Numero NUMERIC(20,2) AS
BEGIN
SET NOCOUNT ON
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 /* WHILE */
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 /* UNIDADES */
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 /* DECENAS */

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 /* CENTENAS */
SELECT @lcCadena CASE /* TERNA */
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 /* TERNA */
SELECT @lcRetorno = @lcCadena + @lcRetorno
SELECT @lnTerna = @lnTerna + 1
END /* WHILE */
IF @lnTerna = 1
SELECT @lcRetorno = 'CERO'
SELECT RTRIM(@lcRetorno) + ' CON ' + LTRIM(STR(@lnFraccion,2)) + '/100'
END
GO
SET QUOTED_IDENTIFIER OFF
SET ANSI_NULLS ON
GO





IF EXISTS (SELECT * FROM sysobjects WHERE id =
object_id(N'[dbo].[sp_Num2Word]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)

DROP PROCEDURE [dbo].[sp_Num2Word]

GO

SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON

GO

/****** Object: Stored Procedure dbo.sp_Num2Let Script Date: 10/05/02
24:00:00 ******/

/****** Autor: Luis Maria Guayan MVP Visual FoxPro ******/

CREATE PROCEDURE sp_Num2Word @Numero NUMERIC(20,2) AS

BEGIN

SET NOCOUNT ON

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 /* WHILE */


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 THEN 'ONE ' + @lcCadena

WHEN @lnUnidades = 2 THEN 'TWO ' + @lcCadena

WHEN @lnUnidades = 3 THEN 'THREE ' + @lcCadena

WHEN @lnUnidades = 4 THEN 'FOUR ' + @lcCadena

WHEN @lnUnidades = 5 THEN 'FIVE ' + @lcCadena

WHEN @lnUnidades = 6 THEN 'SIX ' + @lcCadena

WHEN @lnUnidades = 7 THEN 'SEVEN ' + @lcCadena

WHEN @lnUnidades = 8 THEN 'EIGHT ' + @lcCadena

WHEN @lnUnidades = 9 THEN 'NINE ' + @lcCadena

ELSE @lcCadena

END /* UNIDADES */


SELECT @lcCadena
CASE /* DECENAS */

WHEN @lnDecenas = 1 THEN

CASE @lnUnidades

WHEN 0 THEN 'TEN '

WHEN 1 THEN 'ELEVEN '

WHEN 2 THEN 'TWELVE '

WHEN 3 THEN 'THIRTEEN '

WHEN 4 THEN 'FOURTEEN '

WHEN 5 THEN 'FIFTEEN '

WHEN 6 THEN 'SIXTEEN '

WHEN 7 THEN 'SEVENTEEN '

WHEN 8 THEN 'EIGHTEEN '

WHEN 9 THEN 'NINETEEN '

END

WHEN @lnDecenas = 2 THEN 'TWENTY ' + @lcCadena

WHEN @lnDecenas = 3 THEN 'THIRTY ' + @lcCadena

WHEN @lnDecenas = 4 THEN 'FORTY ' + @lcCadena

WHEN @lnDecenas = 5 THEN 'FIFTY ' + @lcCadena

WHEN @lnDecenas = 6 THEN 'SIXTY ' + @lcCadena

WHEN @lnDecenas = 7 THEN 'SEVENTY ' + @lcCadena

WHEN @lnDecenas = 8 THEN 'EIGHTY ' + @lcCadena

WHEN @lnDecenas = 9 THEN 'NINETY ' + @lcCadena

ELSE @lcCadena

END /* DECENAS */




SELECT @lcCadena
CASE /* CENTENAS */

WHEN @lnCentenas = 1 THEN 'ONE HUNDRED ' + @lcCadena

WHEN @lnCentenas = 2 THEN 'TWO HUNDRED ' + @lcCadena

WHEN @lnCentenas = 3 THEN 'THREE HUNDRED ' + @lcCadena

WHEN @lnCentenas = 4 THEN 'FOUR HUNDRED ' + @lcCadena

WHEN @lnCentenas = 5 THEN 'FIVE HUNDRED ' + @lcCadena

WHEN @lnCentenas = 6 THEN 'SIX HUNDRED ' + @lcCadena

WHEN @lnCentenas = 7 THEN 'SEVEN HUNDRED ' + @lcCadena

WHEN @lnCentenas = 8 THEN 'EIGHT HUNDRED ' + @lcCadena

WHEN @lnCentenas = 9 THEN 'NINE HUNDRED ' + @lcCadena

ELSE @lcCadena

END /* CENTENAS */


SELECT @lcCadena
CASE /* TERNA */

WHEN @lnTerna = 1 THEN @lcCadena

WHEN @lnTerna = 2 THEN @lcCadena + ' THOUSAND '

WHEN @lnTerna = 3 THEN @lcCadena + ' MILLON '

WHEN @lnTerna = 4 THEN @lcCadena + ' BILLON '

ELSE ''

END /* TERNA */


SELECT @lcRetorno = @lcCadena + @lcRetorno

SELECT @lnTerna = @lnTerna + 1

END /* WHILE */

IF @lnTerna = 1

SELECT @lcRetorno = 'ZERO'

SELECT RTRIM(@lcRetorno) + ' AND ' + LTRIM(STR(@lnFraccion,2)) + '/100'

END

GO

SET QUOTED_IDENTIFIER OFF

SET ANSI_NULLS ON

GO







Saludos
IIslas


"leonardo.babines" wrote:

Hola buenas tardes

Estoy trabajando con SQL Server 2000, y necesito un procedimiento que me
permita hacer una conversion de una cantidad monetarias de numeros a Letras
ejemplo
$3500.20 M.N = (Tres mil quinientos pesos 20/100 M.N)


Este codigo se va ejecutar en cuanto se haga la actualizacion de un campo de
una base de datos

Alguna sugerencia.
Gracias por su ayuda.
Respuesta Responder a este mensaje
#2 jeastman - Hotmail
01/11/2007 - 02:09 | Informe spam
Aqui tienes otra opción, quizás falte optimizarla un poco, pero hasta ahora
me ha funcionado bien, si alguien le consigue algún error bien venido el
comentario.

Ojo, son dos funciones, una llamada por la otra

Ejemplo:

select dbo.fnMontoEscrito( 12564.36, 1 )

El segundo parámetro 1 o 0 es para indicar si muestra el mensaje para los
decimales...

Ya tienes dos opciones... :-)

==if exists (select 1
from sysobjects
where xtype = 'FN'
and name = 'fnMontoEscrito' )
begin
drop function fnMontoEscrito
end

create function dbo.fnMontoEscrito (
@Monto money,
@decimales tinyint -- 0 = No; 1 = Si
) returns varchar(1000)
as
begin
declare @MontoEscrito varchar(200),
@sMonto varchar(20),
@i tinyint,
@c tinyint,
@sNivel varchar(3)

set @c = 18

set @sMonto = cast( @Monto as varchar )

set @sMonto = replicate( '0', @c - len( @sMonto ) ) + @sMonto

set @c = 5
set @i = 1

set @MontoEscrito = ''

while @i <= @c
begin
set @sNivel = substring( @sMonto, (@i-1) * 3 + 1, 3 )

set @MontoEscrito = @MontoEscrito + dbo.fnMontoEscritoGrupo( @sNivel, @i )

set @i = @i + 1
end

set @sNivel = right( @sMonto, 2 )

if @decimales = 1
begin
set @MontoEscrito = @MontoEscrito + 'CON ' + @sNivel + '/100 CÉNTIMOS'
end

return @MontoEscrito
end
==
==if exists (select 1
from sysobjects
where xtype = 'FN'
and name = 'fnMontoEscritoGrupo' )
begin
drop function fnMontoEscritoGrupo
end

create function dbo.fnMontoEscritoGrupo (
@Grupo varchar(3),
@Nivel tinyint
) returns varchar(100)
as
begin
declare @sGrupo varchar(100)

set @sGrupo = ''

set @sGrupo = case cast( left( @Grupo, 1 ) as tinyint )
when 0 then ''
when 1 then case cast( substring( @Grupo, 2, 2 ) as tinyint )
when 0 then 'CIEN '
else 'CIENTO ' end
when 2 then 'DOSCIENTOS '
when 3 then 'TRESCIENTOS '
when 4 then 'CUATROCIENTOS '
when 5 then 'QUINIENTOS '
when 6 then 'SEISCIENTOS '
when 7 then 'SETECIENTOS '
when 8 then 'OCHOCIENTOS '
when 9 then 'NOVECIENTOS '
end

if substring( @Grupo, 2, 1 ) = '1'
begin
set @sGrupo = @sGrupo + case substring( @Grupo, 2, 2 )
when '10' then 'DÍEZ '
when '11' then 'ONCE '
when '12' then 'DOCE '
when '13' then 'TRECE '
when '14' then 'CATORCE '
when '15' then 'QUINCE '
when '16' then 'DIECISÉIS '
when '17' then 'DIECISIETE '
when '18' then 'DIECIOCHO '
when '19' then 'DIECINUEVE ' end
end

else if substring( @Grupo, 2, 1 ) = '2'
begin
set @sGrupo = @sGrupo + case substring( @Grupo, 3, 1 )
when '0' then 'VEINTE '
when '1' then 'VEINTIUNO '
when '2' then 'VEINTIDÓS '
when '3' then 'VEINTITRÉS '
when '4' then 'VEINTICUATRO '
when '5' then 'VEINTICINCO '
when '6' then 'VEINTISÉIS '
when '7' then 'VEINTISIETE '
when '8' then 'VEINTIOCHO '
when '9' then 'VEINTINUEVE '
end
end

else if substring( @Grupo, 2, 1 ) != '0'
begin
set @sGrupo = @sGrupo + case substring( @Grupo, 2, 1 )
when '3' then 'TREINTA '
when '4' then 'CUARENTA '
when '5' then 'CINCUENTA '
when '6' then 'SESENTA '
when '7' then 'SETENTA '
when '8' then 'OCHENTA '
when '9' then 'NOVENTA '
end

set @sGrupo = @sGrupo + case substring( @Grupo, 3, 1 )
when '0' then ''
when '1' then 'Y UNO '
when '2' then 'Y DOS '
when '3' then 'Y TRES '
when '4' then 'Y CUATRO '
when '5' then 'Y CINCO '
when '6' then 'Y SÉIS '
when '7' then 'Y SIETE '
when '8' then 'Y OCHO '
when '9' then 'Y NUEVE '
end
end

else
begin
set @sGrupo = @sGrupo + case substring( @Grupo, 3, 1 )
when '0' then ''
when '1' then case @Nivel
when 1 then 'UNO '
when 2 then 'UN '
when 3 then 'UN '
when 4 then 'UN '
when 5 then 'UN '
when 6 then 'UN '
end
when '2' then 'DOS '
when '3' then 'TRES '
when '4' then 'CUATRO '
when '5' then 'CINCO '
when '6' then 'SÉIS '
when '7' then 'SIETE '
when '8' then 'OCHO '
when '9' then 'NUEVE '
end
end

if len( @sGrupo ) > 0
begin
set @sGrupo = @sGrupo + case @Nivel
when 1 then 'BILLON' + case when cast( @Grupo as smallint ) > 1 then 'ES
' else ' ' end
when 2 then 'MIL '
when 3 then 'MILLON' + case when cast( @Grupo as smallint ) > 1 then 'ES
' else ' ' end
when 4 then 'MIL '
when 5 then ''
end

end

return @sGrupo
end
==
"leonardo.babines" escribió en
el mensaje news:
Hola buenas tardes

Estoy trabajando con SQL Server 2000, y necesito un procedimiento que me
permita hacer una conversion de una cantidad monetarias de numeros a
Letras
ejemplo
$3500.20 M.N = (Tres mil quinientos pesos 20/100 M.N)


Este codigo se va ejecutar en cuanto se haga la actualizacion de un campo
de
una base de datos

Alguna sugerencia.
Gracias por su ayuda.
Respuesta Responder a este mensaje
#3 jcpc91
01/11/2007 - 02:12 | Informe spam
qué rayos fue eso
Respuesta Responder a este mensaje
#4 leonardo.babines
01/11/2007 - 05:37 | Informe spam
Muchas gracias por su ayuda, me ha sido de utilidad, ahorita soo he revisado
el primer post, y ahora probare el segundo

Les agradesco por su ayuda,

"leonardo.babines" wrote:

Hola buenas tardes

Estoy trabajando con SQL Server 2000, y necesito un procedimiento que me
permita hacer una conversion de una cantidad monetarias de numeros a Letras
ejemplo
$3500.20 M.N = (Tres mil quinientos pesos 20/100 M.N)


Este codigo se va ejecutar en cuanto se haga la actualizacion de un campo de
una base de datos

Alguna sugerencia.
Gracias por su ayuda.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida