--1) Crear la siguiente función de Base de datos y no olvide darle permiso de ejecución
CREATE FUNCTION [dbo].[CantidadConLetra]
(
@Numero Decimal(18,2)
)
RETURNS Varchar(180)
AS
BEGIN
DECLARE @ImpLetra Varchar(180)
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 */
-- Recorro terna por terna
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)
-- Analizo las unidades
SELECT @lcCadena =
CASE /* UNIDADES */
WHEN @lnUnidades = 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 */
-- Analizo las decenas
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 '
WHEN 6 THEN 'DIEZ Y SEIS '
WHEN 7 THEN 'DIEZ Y SIETE '
WHEN 8 THEN 'DIEZ Y OCHO '
WHEN 9 THEN 'DIEZ Y NUEVE '
END
WHEN @lnDecenas = 2 THEN
CASE @lnUnidades
WHEN 0 THEN 'VEINTE '
ELSE 'VEINTI' + @lcCadena
END
WHEN @lnDecenas = 3 THEN
CASE @lnUnidades
WHEN 0 THEN 'TREINTA '
ELSE 'TREINTA Y ' + @lcCadena
END
WHEN @lnDecenas = 4 THEN
CASE @lnUnidades
WHEN 0 THEN 'CUARENTA'
ELSE 'CUARENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 5 THEN
CASE @lnUnidades
WHEN 0 THEN 'CINCUENTA '
ELSE 'CINCUENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 6 THEN
CASE @lnUnidades
WHEN 0 THEN 'SESENTA '
ELSE 'SESENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 7 THEN
CASE @lnUnidades
WHEN 0 THEN 'SETENTA '
ELSE 'SETENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 8 THEN
CASE @lnUnidades
WHEN 0 THEN 'OCHENTA '
ELSE 'OCHENTA Y ' + @lcCadena
END
WHEN @lnDecenas = 9 THEN
CASE @lnUnidades
WHEN 0 THEN 'NOVENTA '
ELSE 'NOVENTA Y ' + @lcCadena
END
ELSE @lcCadena
END /* DECENAS */
-- Analizo las centenas
SELECT @lcCadena =
CASE /* CENTENAS */
WHEN @lnCentenas = 1 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 */
-- Analizo la terna
SELECT @lcCadena =
CASE /* TERNA */
WHEN @lnTerna = 1 THEN @lcCadena
WHEN @lnTerna = 2 THEN @lcCadena + 'MIL '
WHEN @lnTerna = 3 THEN @lcCadena + 'MILLONES '
WHEN @lnTerna = 4 THEN @lcCadena + 'MIL '
ELSE ''
END /* TERNA */
-- Armo el retorno terna a terna
SELECT @lcRetorno = @lcCadena + @lcRetorno
SELECT @lnTerna = @lnTerna + 1
END /* WHILE */
IF @lnTerna = 1
SELECT @lcRetorno = 'CERO'
DECLARE @sFraccion VARCHAR(15)
SET @sFraccion = '00' + LTRIM(CAST(@lnFraccion AS varchar))
SELECT @ImpLetra = RTRIM(@lcRetorno) + ' PESOS ' + SUBSTRING(@sFraccion,LEN(@sFraccion)-1,2) + '/100 PESOS'
RETURN @ImpLetra
END
GO
¿Cómo se usa?
Ejemplo # 1 de uso pasando como parámetro el campo sueldo de la tabla empleado para el empleado código 5 y suponiendo que este gane 28700.50:
Select dbo.CantidadConLetra(dbo.EMPLEADO.SUELDO)
From Empleado
Where empleado.cod_empleado = 5
RESULTADOS:
VEINTIOCHO MIL SETECIENTOS PESOS 50/100 PESOS
Ejemplo # 2 de uso pasando como parámetro monto 5000:
Select dbo.CantidadConLetra(5000)
CINCO MIL PESOS 00/100 PESOS
Muchísimas gracias. Me sirvió mucho. Saludos.
ResponderEliminarHola,
ResponderEliminarHay ciertos ajustes que se deben hacer para que quede perfecto, aquí algunos ejemplos porque no me dejó poner todo el script por el tamaño, gracias por la ayuda!!
CASE /* CENTENAS */
WHEN @lnCentenas = 1 AND @lnTerna = 3 THEN 'CIEN ' + @lcCadena
WHEN @lnCentenas = 1 AND @lnUnidades = 0 AND @lnDecenas = 0 THEN 'CIEN ' + @lcCadena
WHEN @lnCentenas = 1 AND @lnTerna <> 3 THEN 'CIENTO ' + @lcCadena
Muchas gracias que buen codigo
ResponderEliminarGracias amigo ...Me sirvió mucho..gracias
ResponderEliminarMuchas Gracias, función funcionando perfectamento :3
ResponderEliminarsimplemente excelente..
ResponderEliminarMuy bueno!, me sirvió y gracias por compartir...!!!
ResponderEliminarPD: le hice una pequeña modificación para que pueda trabajar hasta 999,999,999,999.99 no se si deba de ponerla por aquí.
Le hice otro arreglo para que funciones cifras de millones... 2000000 mostraba como DOS MILLONES MIL PESOS 00/100 PESOS
ResponderEliminarSaludos,
Eliminares un buen trabajo.
tengo mel mismo problema de MILLONES MIL
me pudieras enseñar el arreglo que lem hizo porfa
CASE /* TERNA */
EliminarWHEN @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 */
Muchas gracias buen aporte ya funciona a la perfección.
EliminarMuchas Gracias Hermano, me sirvió bastante
ResponderEliminar¡Excelente aporte, muchas gracias!
ResponderEliminargenere mi pequeño aporte de Ajuste
ResponderEliminar---CAMBIO 1
CASE /* UNIDADES */
WHEN @lnUnidades = 1 THEN 'UNO ' + @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 */
--- CAMBIO 2
CASE /* TERNA */
WHEN @lnTerna = 1 THEN @lcCadena
WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) and @lcCadena = 'UNO' THEN 'MIL '
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 and @lcCadena = 'UNO' THEN 'UN MILLON '
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 */
CASE /* TERNA */
EliminarWHEN @lnTerna = 1 THEN @lcCadena
-- MIL
WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) and @lcCadena = 'UNO' THEN 'MIL '
WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + 'MIL '
-- UN MILLON
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND @lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0 and @lcCadena = 'UNO' THEN 'UN MILLON '
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 and @lcCadena = 'UNO' ) THEN 'MIL MILLONES '
WHEN @lnTerna = 4 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + 'MIL MILLONES '
ELSE ''
END /* TERNA */
EJEMPLO
select dbo.CantidadConLetra(1000)
select dbo.CantidadConLetra(1000000)
select dbo.CantidadConLetra(1000000000)
select dbo.CantidadConLetra(2000000000)
despues de millones que usamos .... ??? creo que un rango suficiente
sujiero cambiar conceptos de SQL por FnCantidadConLetra Fn es para funciones .... es mas facil usar referencia en letras
Fernando,
EliminarSi pruebas con el numero 999.999.999.999 te da el siguiente resultado
NOVECIENTOS NOVENTA Y NUEVE MIL MILLONES NOVECIENTOS NOVENTA Y NUEVE MILLONES NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE
Pero debiese ser
NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE MILLONES NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE
Con el siguiente cambio queda solucionado declaro una bandera primero @tieneMillones
Eliminar-- Analizo la terna
IF (@lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0))
SET @tieneMillones = 1
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) AND @tieneMillones = 1 THEN @lcCadena + 'MIL '
WHEN @lnTerna = 4 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + 'MIL MILLONES '
ELSE ''
END /* TERNA */
Select dbo.CantidadConLetra(999000010000)
salida:
NOVECIENTOS NOVENTA Y NUEVE MIL MILLONES DIEZ MIL
Select dbo.CantidadConLetra(999999010000)
salida:
NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE MILLONES DIEZ MIL
hola tendrás una manera pero para convertir los meses en letra
ResponderEliminarselect dbo.FnFechaMeses(getdate())
Eliminar-- =============================================
-- Author: Fernando yevenes
-- Create date: 07/10/2014
-- Description: funcion indica Meses del año
-- =============================================
CREATE FUNCTION [dbo].[FnFechaMeses](@FECHA datetime)
RETURNS nvarchar(100)
AS
BEGIN
DECLARE @valor nvarchar(100);
set @valor = ( SELECT CASE WHEN MONTH(@fecha) = 1 THEN 'Enero'
WHEN MONTH(@fecha) = 2 THEN 'Febrero'
WHEN MONTH(@fecha) = 3 THEN 'Marzo'
WHEN MONTH(@fecha) = 4 THEN 'Abril'
WHEN MONTH(@fecha) = 5 THEN 'Mayo'
WHEN MONTH(@fecha) = 6 THEN 'Junio'
WHEN MONTH(@fecha) = 7 THEN 'Julio'
WHEN MONTH(@fecha) = 8 THEN 'Agosto'
WHEN MONTH(@fecha) = 9 THEN 'Septiembre'
WHEN MONTH(@fecha) = 10 THEN 'Octubre'
WHEN MONTH(@fecha) = 11 THEN 'Noviembre'
WHEN MONTH(@fecha) = 12 THEN 'Diciembre'
END 'Mes' )
RETURN(ltrim(rtrim(@valor)));
END;
Hola Lorena acosta villalobos esto te puede servir, select DATENAME(month,GETDATE()), si necesitas cambiarlo a español puedes utilizar set language spanish
EliminarExcelente!
ResponderEliminarHola aqui tengo una pequeña modificacion.
ResponderEliminarespecialmente para los valores
1
21
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
Tome su like, buen hombre!!... Todavía en el 2016 tu aporte es de gran utilidad... ¡GRACIAS!
ResponderEliminar(Y)
ResponderEliminarHola,
ResponderEliminarTengo un total en dolares que es 0.01 y necesito que en letras salga 01/100, con la función que tengo me sale CERO.
Está con madre tu código, yo sólo le agregaría este ajuste al final, antes del return
ResponderEliminarIF (LEFT(@ImpLetra,2) = 'UN' AND @ImpLetra LIKE '%MILLONES%')
BEGIN
SELECT @ImpLetra = REPLACE(@ImpLetra,'MILLONES','MILLON')
END
voy ha acerlo .. ademas falta agregar a un google driver y lo comparto
EliminarExcelente! Muchas gracias a todos
ResponderEliminarBuenas,
ResponderEliminarTengo problemas ps necesito los centavos tambien
Necesito agregarle unidades a los centavos alguien me podría ayudar
ResponderEliminarHola Gracias por el aporte necesito que me muestre BILLONES como seria para ese caso.
ResponderEliminarHola buenas tardes, alguna funcion pero para SSRS?
ResponderEliminarGracias!!!!
ResponderEliminarExcelente aporte, gracias.
ResponderEliminarGracias Amigo, me sirve muchisimo este codigo, pero una duda. Si los miles van separados por coma que modificacion puedo hacer a este codigo, de antemano gracias
ResponderEliminarLa función tiene errores, cuando se le pasa 1000001 retorna UN MILLONES MIL UN PESOS 00/100 PESOS
ResponderEliminarno existe la perfeccion para ganar tanto jajaja
EliminarMediante estas dos funciones tienes una implementación que soporta hasta el valor máximo de un bigint 9223372036854775807
ResponderEliminarselect [dbo].[GetNumbertText] (9001372036854775807).
CREATE FUNCTION [dbo].[GetNumbertText]( @Number bigInt ) RETURNS varchar(255)
AS
BEGIN
DECLARE @ResultVar varchar(255)=''
Declare @aux1 Varchar(21)
Declare @g0 Integer, @g1 Integer, @g2 Integer,@g3 Integer, @g4 Integer, @g5 Integer, @g6 Integer
set @Aux1 = Format(@Number, '000000000000000000000')
Set @g0= Convert(int, Substring(@aux1,19,3))
Set @g1= Convert(int, Substring(@aux1,16,3))
Set @g2= Convert(int, Substring(@aux1,13,3))
Set @g3= Convert(int, Substring(@aux1,10,3))
Set @g4= Convert(int, Substring(@aux1,7,3))
Set @g5= Convert(int, Substring(@aux1,4,3))
Set @g6= Convert(int, Substring(@aux1,1,3))
Set @ResultVar= Case when @G6=1 then 'UN TRILLÓN' when @G6>0 then ' ' + [dbo].[GetNumber3DigitText](@G6) + ' TRILLONES' ELSE '' END +
Case when @G5=1 then ' MIL' when @G5>0 then ' ' + [dbo].[GetNumber3DigitText](@G5) + ' MIL' ELSE '' END +
Case when @G4=1 then 'UN BILLÓN' When @G5 + @g4 >0 then ' ' + [dbo].[GetNumber3DigitText](@G4) + ' BILLONES' ELSE '' END +
Case when @G3=1 then ' MIL' when @G3>0 then ' ' + [dbo].[GetNumber3DigitText](@G3) + ' MIL' ELSE '' END +
Case when @G2=1 then 'UN MILLÖN' When @G3+@g2 >0 then ' ' + [dbo].[GetNumber3DigitText](@G2) + ' MILLONES' ELSE '' END+
Case when @G1=1 then ' MIL' When @G1>0 then ' ' + [dbo].[GetNumber3DigitText](@G1) + ' MIL' ELSE '' END +
' ' + [dbo].[GetNumber3DigitText](@G0)
RETURN ltrim(@ResultVar)
END
Función dos:
EliminarCREATE FUNCTION [dbo].[GetNumber3DigitText](@Number int ) RETURNS varchar(255)
AS
BEGIN
DECLARE @Cent int, @Dec int, @Und int
SET @und= @Number % 10
SET @dec= ((@Number - @Und) / 10) % 10
SET @Cent = ((@Number - 10* @dec - @Und) / 100)
DECLARE @ResultVar varchar(255)
SET @ResultVar =
Case @Cent
when 0 then ''
When 1 Then Case when @Dec*10 + @Und=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
SET @ResultVar = @ResultVar + case Len(@ResultVar) when 0 then '' else ' ' end
SET @ResultVar = @ResultVar +
CASE WHEN @Dec<3 THEN '' ELSE
Case @Dec
when 0 then ''
When 1 Then 'DIEZ'
When 2 Then 'VEINTE'
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
END
SET @ResultVar = Rtrim(@ResultVar) + case Len(@ResultVar) when 0 then '' else ' ' end
SET @ResultVar = @ResultVar + CASE WHEN @Dec>=3 AND @Und>0 THEN 'Y ' ELSE '' END
SET @ResultVar = @ResultVar +
CASE WHEN @Dec<3 OR @Und=0 THEN '' ELSE
Case @UND
when 0 then ''
When 1 Then 'UN'
When 2 Then 'DOS'
When 3 Then 'TRES'
When 4 Then 'CUATRO'
When 5 Then 'CINCO'
When 6 Then 'SEIS'
When 7 Then 'SIETE'
When 8 Then 'OCHO'
When 9 Then 'NUEVE'
End
END
SET @ResultVar = Rtrim(@ResultVar) + case when Len(@ResultVar) = 0 or @Dec>=3 then '' else ' ' end
SET @ResultVar = @ResultVar +
CASE WHEN @Dec>=3 then '' else
Case @Dec*10+ @UND
when 0 then ''
When 1 Then 'UN'
When 2 Then 'DOS'
When 3 Then 'TRES'
When 4 Then 'CUATRO'
When 5 Then 'CINCO'
When 6 Then 'SEIS'
When 7 Then 'SIETE'
When 8 Then 'OCHO'
When 9 Then 'NUEVE'
When 10 Then 'DIEZ'
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'
When 20 Then 'VEINTE'
When 21 Then 'VEINTIÚN'
When 22 Then 'VEINTIDDOS'
When 23 Then 'VEINTITRÉS'
When 24 Then 'VEINTICUATRO'
When 25 Then 'VEINTICINCO'
When 26 Then 'VEINTISÉIS'
When 27 Then 'VEINTISIETE'
When 28 Then 'VEINTIOCHO'
When 29 Then 'VEINTINUEVE'
End
End
RETURN @ResultVar
END
Solo es una función no puedo adaptar para PROCEDDURE, busqueda de datos de un comprobante (tipo, serie , numero) y el total de comprobante convertir a letras, el total es de tipo numerico(10, 2)
ResponderEliminarMuchas gracias, estuve buscando algo de esto, excelente aporte.
ResponderEliminarHice algunas modificaciones (En caso de 100 salia CIENTO debe ser CIEN, en caso de 1001 salía UN MIL UN, ahora sale MIL UNO, etc), espero les sirva.
NOTA: Adaptado para PERÚ.
CREATE FUNCTION [dbo].[Fn_NumerosALetras]
(
@Numero Decimal(18,2)
)
RETURNS Varchar(180)
AS
BEGIN
DECLARE @ImpLetra Varchar(180)
DECLARE @lnEntero bigint,@LenNum int,@lnEntero2 VARCHAR(20),
@lcRetorno VARCHAR(512),
@lnTerna bigint,
@lcMiles VARCHAR(512),
@lcCadena VARCHAR(512),
@lnUnidades bigint,
@lnDecenas bigint,
@lnCentenas bigint,
@lnFraccion bigint,
@tieneMillones bigint
SELECT @lnEntero = CAST(@Numero AS bigint),
@lnFraccion = (@Numero - @lnEntero) * 100,
@lcRetorno = '',
@lnTerna = 1,
@lnEntero2= CAST(@lnEntero AS VARCHAR(20)),
@LenNum=len(@lnEntero2)
--AQUI VA EL WHILE
IF @lnTerna = 1
SELECT @lcRetorno = 'CERO'
DECLARE @sFraccion VARCHAR(15)
SET @sFraccion = '00' + LTRIM(CAST(@lnFraccion AS varchar))
IF @LenNum>2
BEGIN
SET @lnUnidades = SUBSTRING(@lnEntero2,@LenNum,1)
SET @lnDecenas = SUBSTRING(@lnEntero2,@LenNum-1,1)
SET @lnCentenas = SUBSTRING(@lnEntero2,@LenNum-2,1)
if @lnDecenas = 0 and @lnUnidades = 1 SET @lcRetorno=SUBSTRING(@lcRetorno,1,len(@lcRetorno)-2) + 'UNO'
END
IF @LenNum=4
BEGIN
SET @lnUnidades = SUBSTRING(@lnEntero2,1,1)
if @lnUnidades = 1 SET @lcRetorno=REPLACE(@lcRetorno,'UN ',' ')
END
SET @lcRetorno=REPLACE(@lcRetorno,'CIENTO MIL','CIEN MIL')
SELECT @ImpLetra = RTRIM(@lcRetorno) + ' CON ' + SUBSTRING(@sFraccion,LEN(@sFraccion)-1,2) + '/100 SOLES'
SET @ImpLetra=REPLACE(@ImpLetra,'CIENTO CON','CIEN CON')
SET @ImpLetra=REPLACE(@ImpLetra,'VEINTIUN CON','VEINTIUNO CON')
SET @ImpLetra=REPLACE(@ImpLetra,' Y UN CON', ' Y UNO CON')
RETURN @ImpLetra
END;
se los paso con dolares!!!
ResponderEliminarALTER FUNCTION [dbo].[CantidadConLetra]
(
@Numero Decimal(18,2),
@Moneda int
)
RETURNS Varchar(180)
AS
BEGIN
---ultima parte
SELECT @ImpLetra = RTRIM(@lcRetorno) + ' PESOS ' + SUBSTRING(@sFraccion,LEN(@sFraccion)-1,2) + '/100 MXN'
end else
if @Moneda = 1
begin
SELECT @ImpLetra = RTRIM(@lcRetorno) + ' DÓLARES ' + SUBSTRING(@sFraccion,LEN(@sFraccion)-1,2) + '/100 USD'
end
RETURN @ImpLetra
END
Como utilizar en reporte rdlc te agradezo mucho
ResponderEliminarexelente funciona al cien
ResponderEliminarComo seria la funcion con un precio, para euros con sus decimales?
ResponderEliminarEXCELENTE APORTE MUCHISIMAS GRACIAS
ResponderEliminar