Ver Mensaje Individual
  #9 (permalink)  
Antiguo 18/01/2011, 08:02
Avatar de flaviovich
flaviovich
 
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: De monto a monto en letras

Es tal como lo dijo Isaias, tenias que convertirlo a una funcion:
Código SQL:
Ver original
  1. ALTER FUNCTION [dbo].[Num2Let]( @Numero NUMERIC(20,2) )
  2. RETURNS VARCHAR(520)
  3. AS
  4. BEGIN
  5. --SET NOCOUNT ON
  6. DECLARE @lnEntero INT,
  7. @lcRetorno VARCHAR(512),
  8. @lnTerna INT,
  9. @lcMiles VARCHAR(512),
  10. @lcCadena VARCHAR(512),
  11. @lnUnidades INT,
  12. @lnDecenas INT,
  13. @lnCentenas INT,
  14. @lnFraccion INT
  15.  
  16. SELECT @lnEntero = CAST(@Numero AS INT),
  17. @lnFraccion = (@Numero - @lnEntero) * 100,
  18. @lcRetorno = '',
  19. @lnTerna = 1
  20.  
  21. WHILE @lnEntero > 0
  22. BEGIN /* WHILE */
  23. -- Recorro terna por terna
  24. SELECT @lcCadena = ''
  25. SELECT @lnUnidades = @lnEntero % 10
  26. SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
  27. SELECT @lnDecenas = @lnEntero % 10
  28. SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
  29. SELECT @lnCentenas = @lnEntero % 10
  30. SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
  31.  
  32. -- Analizo las unidades
  33. SELECT @lcCadena =
  34. CASE /* UNIDADES */
  35. WHEN @lnUnidades = 1 AND @lnTerna = 1 THEN 'UNO ' + @lcCadena
  36. WHEN @lnUnidades = 1 AND @lnTerna <> 1 THEN 'UN ' + @lcCadena
  37. WHEN @lnUnidades = 2 THEN 'DOS ' + @lcCadena
  38. WHEN @lnUnidades = 3 THEN 'TRES ' + @lcCadena
  39. WHEN @lnUnidades = 4 THEN 'CUATRO ' + @lcCadena
  40. WHEN @lnUnidades = 5 THEN 'CINCO ' + @lcCadena
  41. WHEN @lnUnidades = 6 THEN 'SEIS ' + @lcCadena
  42. WHEN @lnUnidades = 7 THEN 'SIETE ' + @lcCadena
  43. WHEN @lnUnidades = 8 THEN 'OCHO ' + @lcCadena
  44. WHEN @lnUnidades = 9 THEN 'NUEVE ' + @lcCadena
  45. ELSE @lcCadena
  46. END /* UNIDADES */
  47.  
  48. -- Analizo las decenas
  49. SELECT @lcCadena =
  50. CASE /* DECENAS */
  51. WHEN @lnDecenas = 1 THEN
  52. CASE @lnUnidades
  53. WHEN 0 THEN 'DIEZ '
  54. WHEN 1 THEN 'ONCE '
  55. WHEN 2 THEN 'DOCE '
  56. WHEN 3 THEN 'TRECE '
  57. WHEN 4 THEN 'CATORCE '
  58. WHEN 5 THEN 'QUINCE '
  59. ELSE 'DIECI' + @lcCadena
  60. END
  61. WHEN @lnDecenas = 2 AND @lnUnidades = 0 THEN 'VEINTE ' + @lcCadena
  62. WHEN @lnDecenas = 2 AND @lnUnidades <> 0 THEN 'VEINTI' + @lcCadena
  63. WHEN @lnDecenas = 3 AND @lnUnidades = 0 THEN 'TREINTA ' + @lcCadena
  64. WHEN @lnDecenas = 3 AND @lnUnidades <> 0 THEN 'TREINTA Y ' + @lcCadena
  65. WHEN @lnDecenas = 4 AND @lnUnidades = 0 THEN 'CUARENTA ' + @lcCadena
  66. WHEN @lnDecenas = 4 AND @lnUnidades <> 0 THEN 'CUARENTA Y ' + @lcCadena
  67. WHEN @lnDecenas = 5 AND @lnUnidades = 0 THEN 'CINCUENTA ' + @lcCadena
  68. WHEN @lnDecenas = 5 AND @lnUnidades <> 0 THEN 'CINCUENTA Y ' + @lcCadena
  69. WHEN @lnDecenas = 6 AND @lnUnidades = 0 THEN 'SESENTA ' + @lcCadena
  70. WHEN @lnDecenas = 6 AND @lnUnidades <> 0 THEN 'SESENTA Y ' + @lcCadena
  71. WHEN @lnDecenas = 7 AND @lnUnidades = 0 THEN 'SETENTA ' + @lcCadena
  72. WHEN @lnDecenas = 7 AND @lnUnidades <> 0 THEN 'SETENTA Y ' + @lcCadena
  73. WHEN @lnDecenas = 8 AND @lnUnidades = 0 THEN 'OCHENTA ' + @lcCadena
  74. WHEN @lnDecenas = 8 AND @lnUnidades <> 0 THEN 'OCHENTA Y ' + @lcCadena
  75. WHEN @lnDecenas = 9 AND @lnUnidades = 0 THEN 'NOVENTA ' + @lcCadena
  76. WHEN @lnDecenas = 9 AND @lnUnidades <> 0 THEN 'NOVENTA Y ' + @lcCadena
  77. ELSE @lcCadena
  78. END /* DECENAS */
  79.  
  80.  
  81. -- Analizo las centenas
  82. SELECT @lcCadena =
  83. CASE /* CENTENAS */
  84. WHEN @lnCentenas = 1 AND @lnUnidades = 0 AND @lnDecenas = 0 THEN 'CIEN ' + @lcCadena
  85. WHEN @lnCentenas = 1 AND NOT(@lnUnidades = 0 AND @lnDecenas = 0) THEN 'CIENTO ' + @lcCadena
  86. WHEN @lnCentenas = 2 THEN 'DOSCIENTOS ' + @lcCadena
  87. WHEN @lnCentenas = 3 THEN 'TRESCIENTOS ' + @lcCadena
  88. WHEN @lnCentenas = 4 THEN 'CUATROCIENTOS ' + @lcCadena
  89. WHEN @lnCentenas = 5 THEN 'QUINIENTOS ' + @lcCadena
  90. WHEN @lnCentenas = 6 THEN 'SEISCIENTOS ' + @lcCadena
  91. WHEN @lnCentenas = 7 THEN 'SETECIENTOS ' + @lcCadena
  92. WHEN @lnCentenas = 8 THEN 'OCHOCIENTOS ' + @lcCadena
  93. WHEN @lnCentenas = 9 THEN 'NOVECIENTOS ' + @lcCadena
  94. ELSE @lcCadena
  95. END /* CENTENAS */
  96.  
  97. -- Analizo la terna
  98. SELECT @lcCadena =
  99. CASE /* TERNA */
  100. WHEN @lnTerna = 1 THEN @lcCadena
  101. WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' MIL '
  102. WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
  103. @lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0 THEN @lcCadena + ' MILLON '
  104. WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
  105. NOT (@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0) THEN @lcCadena + ' MILLONES '
  106. WHEN @lnTerna = 4 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' MIL MILLONES '
  107. ELSE ''
  108. END /* TERNA */
  109.  
  110. -- Armo el retorno terna a terna
  111. SELECT @lcRetorno = @lcCadena + @lcRetorno
  112. SELECT @lnTerna = @lnTerna + 1
  113.  
  114. END /* WHILE */
  115.  
  116. IF @lnTerna = 1
  117. SELECT @lcRetorno = 'CERO'
  118.  
  119. RETURN RTRIM(@lcRetorno) + ' CON ' + LTRIM(STR(@lnFraccion,2)) + '/100'
  120.  
  121. END

El modo de usar:
Código SQL:
Ver original
  1. SELECT *, dbo.Num2Let(monto) FROM jfor.documetos_cp
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.