Convertir numeros a letras

26/03/2007 - 19:30 por Edwin | Informe spam
Amigos,

Como hago en Sql Server para convertir numero a letras, por ejemplo
278.15 -> "DOCIENTOS OCHENTA Y SIETE 15/100".

Espero sus respuestas,

Gracias

Edwin Solórzano
www.exitoseguro.ws

Preguntas similare

Leer las respuestas

#1 Javier Loria
26/03/2007 - 19:53 | Informe spam
Hola Edwin:
Puedes leer:
http://msmvps.com/blogs/jvargas/pag...etras.aspx
Pero en una nota aparte, te parece que esto es responsabilidad de la
Base de Datos?, no deberia ser de algun componente desarrollado en algun
lenguaje "fuerte"?
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"Edwin" wrote in message
news:
Amigos,

Como hago en Sql Server para convertir numero a letras, por ejemplo
278.15 -> "DOCIENTOS OCHENTA Y SIETE 15/100".

Espero sus respuestas,

Gracias

Edwin Solórzano
www.exitoseguro.ws



Respuesta Responder a este mensaje
#2 Edwin
26/03/2007 - 22:32 | Informe spam
Gracias Javier.


"Javier Loria" escribió en el mensaje
news:ejBVr%
Hola Edwin:
Puedes leer:
http://msmvps.com/blogs/jvargas/pag...etras.aspx
Pero en una nota aparte, te parece que esto es responsabilidad de la
Base de Datos?, no deberia ser de algun componente desarrollado en algun
lenguaje "fuerte"?
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"Edwin" wrote in message
news:
Amigos,

Como hago en Sql Server para convertir numero a letras, por ejemplo
278.15 -> "DOCIENTOS OCHENTA Y SIETE 15/100".

Espero sus respuestas,

Gracias

Edwin Solórzano
www.exitoseguro.ws






Respuesta Responder a este mensaje
#3 Isaias
28/03/2007 - 03:44 | Informe spam
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

Saludos
IIslas


"Edwin" wrote:

Amigos,

Como hago en Sql Server para convertir numero a letras, por ejemplo
278.15 -> "DOCIENTOS OCHENTA Y SIETE 15/100".

Espero sus respuestas,

Gracias

Edwin Solórzano
www.exitoseguro.ws




Respuesta Responder a este mensaje
#4 Minothauro
28/03/2007 - 14:40 | Informe spam
Hola, te cuento que no se recomienda utilizar la lógica de SQL para
realizar operaciones de este tipo, por una cuestion de optimizacion.
SQL Server 2005 trae la posibilidad de realizar usa "funcion" a traves
de VB.Net por ejemplo y ser utilizado en la sentencia SQL deseada.


Atte.
Respuesta Responder a este mensaje
#5 Maxi
28/03/2007 - 15:06 | Informe spam
Hola, es totalmente cierto esto, pero nuestro amigo no ha comentado que SQL
tiene :(


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Minothauro" escribió en el mensaje
news:
Hola, te cuento que no se recomienda utilizar la lógica de SQL para
realizar operaciones de este tipo, por una cuestion de optimizacion.
SQL Server 2005 trae la posibilidad de realizar usa "funcion" a traves
de VB.Net por ejemplo y ser utilizado en la sentencia SQL deseada.


Atte.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida