|
/*
FUNCIONES PARA LA CONVERSION DE NUMEROS A CANTIDADES CON LETRA
PROG. SAM
VER. 1.0
ENVIO: 11 NOV 2004
*/
CREATE FUNCTION dbo.fnUnidades(@Numero tinyint)
RETURNS varchar(6)
AS
BEGIN
DECLARE
@Resultado varchar(6)
IF(@Numero = 1)
SET @Resultado = 'un'
IF(@Numero = 2)
SET @Resultado = 'dos'
IF(@Numero = 3)
SET @Resultado = 'tres'
IF(@Numero = 4)
SET @Resultado = 'cuatro'
IF(@Numero = 5)
SET @Resultado = 'cinco'
IF(@Numero = 6)
SET @Resultado = 'seis'
IF(@Numero = 7)
SET @Resultado = 'siete'
IF(@Numero = 8)
SET @Resultado = 'ocho'
IF(@Numero = 9)
SET @Resultado = 'nueve'
RETURN @Resultado
END
GO
CREATE FUNCTION dbo.fnDecenas(@Numero tinyint)
RETURNS varchar(25)
AS
BEGIN
DECLARE
@Decena tinyint,
@Unidad tinyint,
@Resultado varchar(25)
SET @Decena = FLOOR(@Numero / 10)
SET @Unidad = (@Numero - (@Decena * 10))
IF(@Numero BETWEEN 1 AND 9)
SET @Resultado = dbo.fnUnidades(@Unidad)
IF(@Numero BETWEEN 10 AND 20)
BEGIN
IF(@Numero = 10)
SET @Resultado = 'diez'
IF(@Numero = 11)
SET @Resultado = 'once'
IF(@Numero = 12)
SET @Resultado = 'doce'
IF(@Numero = 13)
SET @Resultado = 'trece'
IF(@Numero = 14)
SET @Resultado = 'catorce'
IF(@Numero = 15)
SET @Resultado = 'quince'
IF(@Numero BETWEEN 16 AND 19)
SET @Resultado = 'dieci' + dbo.fnUnidades(@Unidad)
IF(@Numero = 20)
SET @Resultado = 'veinte'
END
IF(@Numero BETWEEN 21 AND 29)
SET @Resultado = 'veinti' + dbo.fnUnidades(@Unidad)
IF(@Decena BETWEEN 3 AND 9)
BEGIN
IF(@Decena = 3)
SET @Resultado = 'treinta'
IF(@Decena = 4)
SET @Resultado = 'cuarenta'
IF(@Decena = 5)
SET @Resultado = 'cincuenta'
IF(@Decena = 6)
SET @Resultado = 'sesenta'
IF(@Decena = 7)
SET @Resultado = 'setenta'
IF(@Decena = 8)
SET @Resultado = 'ochenta'
IF(@Decena = 9)
SET @Resultado = 'noventa'
IF(dbo.fnUnidades(@Unidad) <> '')
SET @Resultado = @Resultado + ' y ' + dbo.fnUnidades
(@Unidad)
END
RETURN @Resultado
END
GO
CREATE FUNCTION dbo.fnCentenas(@Numero smallint)
RETURNS varchar(40)
AS
BEGIN
DECLARE
@Centena smallint,
@Decena tinyint,
@Resultado varchar(40)
SET @Centena = (@Numero / 100)
SET @Decena = (@Numero - (@Centena * 100))
IF(@Centena = 0)
SET @Resultado = dbo.fnDecenas(@Decena)
IF(@Centena = 1)
BEGIN
SET @Resultado = 'cien'
IF(dbo.fnDecenas(@Decena) <> '')
SET @Resultado = @Resultado + 'to ' + dbo.fnDecenas
(@Decena)
END
IF(@Centena BETWEEN 2 AND 4)
BEGIN
SET @Resultado = dbo.fnUnidades(@Centena) + 'cientos'
IF(dbo.fnDecenas(@Decena) <> '')
SET @Resultado = @Resultado + ' ' + dbo.fnDecenas
(@Decena)
END
IF(@Centena > 4)
BEGIN
IF(@Centena = 5)
SET @Resultado = 'quinientos'
IF(@Centena = 6)
SET @Resultado = 'seiscientos'
IF(@Centena = 7)
SET @Resultado = 'setecientos'
IF(@Centena = 8)
SET @Resultado = 'ochocientos'
IF(@Centena = 9)
SET @Resultado = 'novecientos'
IF(dbo.fnDecenas(@Decena) <> '')
SET @Resultado = @Resultado + ' ' + dbo.fnDecenas(@Decena)
END
RETURN @Resultado
END
go
ALTER FUNCTION dbo.fnMillares(@Numero int)
RETURNS varchar(80)
AS
BEGIN
DECLARE
@Millar int,
@Centena smallint,
@Resultado varchar(80)
SET @Millar = FLOOR(@Numero / 1000)
SET @Centena = (@Numero - (@Millar * 1000))
IF(@Millar < 1)
SET @Resultado = dbo.fnCentenas(@Centena)
IF(@Millar = 1)
BEGIN
SET @Resultado = 'mil'
IF(dbo.fnCentenas(@Centena) <> '')
BEGIN
SET @Resultado = @Resultado + ' ' + dbo.fnCentenas
(@Centena)
END
END
IF(@Millar > 1)
BEGIN
SET @Resultado = dbo.fnCentenas(@Millar) + ' mil'
IF(dbo.fnCentenas(@Centena) <> '')
SET @Resultado = @Resultado + ' ' + dbo.fnCentenas
(@Centena)
END
RETURN @Resultado
END
GO
CREATE FUNCTION dbo.fnImporteLetra(@Numero money)
RETURNS varchar(180)
AS
BEGIN
DECLARE
@Millon int,
@Millar int,
@Centavos tinyint,
@Moneda varchar(5),
@Mon varchar(4),
@Resultado varchar(180)
SET @Millon = FLOOR((@Numero / 1000000))
SET @Millar = @Numero - (@Millon * 1000000)
IF(@Millon < 1)
BEGIN
SET @Resultado = dbo.fnMillares(@Millar)
END
IF(@Millon = 1)
BEGIN
SET @Resultado = 'un millón'
IF(dbo.fnMillares(@Millar) <> '')
SET @Resultado = @Resultado + dbo.fnMillares(@Millar)
END
IF(@Millon > 1)
BEGIN
SET @Resultado = dbo.fnMillares(@Millon) + ' millones'
IF(dbo.fnMillares(@Millar) <> '')
SET @Resultado = @Resultado + ' ' + dbo.fnMillares
(@Millar)
END
SET @Moneda = 'pesos'
SET @Mon = 'm.n.'
SET @Centavos = CONVERT(tinyint, (@Numero * 100 - FLOOR(@Numero)
* 100))
SET @Resultado = @Resultado + ' ' + @Moneda + ' ' + CONVERT
(varchar(2), @Centavos) + '/100 ' + @Mon
RETURN '(' + @Resultado + ')'
END
GO
SELECT 444444444.25, dbo.fnImporteLetra(444444444.25)
GO
-- Espero que esta contribucion sea de utilidad
-- Atte. Sam
|