SP para convertir numeros a letras

25/11/2003 - 00:16 por Noriel | Informe spam
Buenas tardes grupo alguien podria facilitarme algun store procedure que convierta numeros a letras en el idioma español

Gracias de antemano por la ayuda que me puedan dar

Preguntas similare

Leer las respuestas

#1 Isaías
25/11/2003 - 01:34 | Informe spam
En ESPAÑOL

/****** Object: Stored Procedure dbo.sp_Num2Let Script
Date: 10/05/02 24:00:00 ******/
/****** Autor: Luis Maria Guayan MVP Visual FoxPro ******/
CREATE PROCEDURE sp_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
Respuesta Responder a este mensaje
#2 Isaias
25/11/2003 - 01:35 | Informe spam
En INGLES


/****** 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
Respuesta Responder a este mensaje
#3 Miguel Egea
25/11/2003 - 09:23 | Informe spam
además de las funciones de Luis María, creo que en portalsql.com tienes una
udf que hace esto.

Saludos
Miguel Egea
"Noriel" escribió en el mensaje
news:
Buenas tardes grupo alguien podria facilitarme algun store procedure que


convierta numeros a letras en el idioma español.

Gracias de antemano por la ayuda que me puedan dar.

Respuesta Responder a este mensaje
#4 garraxxi
31/08/2005 - 15:48 | Informe spam
buscando lo mismo encontré esto; no lo he analizado siquiera, pero co
una mirada a 'vuelo de pájaro', parece tener lógica.

CREATE PROCEDURE sp_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 'CIE
' + @lcCadena
WHEN @lnCentenas = 1 AND NOT(@lnUnidades = 0 AND @lnDecenas = 0) THE
'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) THE
@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


garraxxi

garraxxi's Profile: http://www.msusenet.com/member.php?useridG84
View this thread: http://www.msusenet.com/t-921895
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida