Advertisement
Guest User

Function

a guest
Apr 14th, 2014
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 6.04 KB | None | 0 0
  1. Create FUNCTION letras(Numero NUMERIC(20,2),  XMoneda VARCHAR(100)) RETURNS VARCHAR(512)
  2. DETERMINISTIC
  3. BEGIN
  4.     DECLARE XlnEntero int;
  5.     DECLARE XlcRetorno VARCHAR(512);
  6.     DECLARE XlnTerna INT;
  7.     DECLARE XlcMiles VARCHAR(512);
  8.     DECLARE XlcCadena VARCHAR(512);
  9.     DECLARE XlnUnidades INT;
  10.     DECLARE XlnDecenas INT;
  11.     DECLARE XlnCentenas INT;
  12.     DECLARE XlnFraccion INT;
  13.     DECLARE Xresultado varchar(512);
  14.    
  15.     SET XlnEntero = FLOOR(XNumero);
  16.     SET XlnFraccion = (XNumero - XlnEntero) * 100;
  17.     SET XlcRetorno = '';
  18.     SET XlnTerna = 1 ;
  19.         WHILE( XlnEntero > 0) DO
  20.    
  21.             #Recorro terna por terna
  22.             SET XlcCadena = '';
  23.             SET XlnUnidades = XlnEntero MOD 10;
  24.             SET XlnEntero = FLOOR(XlnEntero/10);
  25.             SET XlnDecenas = XlnEntero MOD 10;
  26.             SET XlnEntero = FLOOR(XlnEntero/10);
  27.             SET XlnCentenas = XlnEntero MOD 10;
  28.             SET XlnEntero = FLOOR(XlnEntero/10);
  29.    
  30.             #Analizo las unidades
  31.             SET XlcCadena =
  32.                 CASE # UNIDADES
  33.                     WHEN XlnUnidades = 1 AND XlnTerna = 1 THEN CONCAT('UNO ', XlcCadena)
  34.                     WHEN XlnUnidades = 1 AND XlnTerna <> 1 THEN CONCAT('UN ', XlcCadena)
  35.                     WHEN XlnUnidades = 2 THEN CONCAT('DOS ', XlcCadena)
  36.                     WHEN XlnUnidades = 3 THEN CONCAT('TRES ', XlcCadena)
  37.                     WHEN XlnUnidades = 4 THEN CONCAT('CUATRO ', XlcCadena)
  38.                     WHEN XlnUnidades = 5 THEN CONCAT('CINCO ', XlcCadena)
  39.                     WHEN XlnUnidades = 6 THEN CONCAT('SEIS ', XlcCadena)
  40.                     WHEN XlnUnidades = 7 THEN CONCAT('SIETE ', XlcCadena)
  41.                     WHEN XlnUnidades = 8 THEN CONCAT('OCHO ', XlcCadena)
  42.                     WHEN XlnUnidades = 9 THEN CONCAT('NUEVE ', XlcCadena)
  43.                     ELSE XlcCadena
  44.                 END; #UNIDADES
  45.    
  46.             #Analizo las decenas
  47.             SET XlcCadena =
  48.                 CASE #DECENAS
  49.                     WHEN XlnDecenas = 1 THEN
  50.                         CASE XlnUnidades
  51.                             WHEN 0 THEN 'DIEZ '
  52.                             WHEN 1 THEN 'ONCE '
  53.                             WHEN 2 THEN 'DOCE '
  54.                             WHEN 3 THEN 'TRECE '
  55.                             WHEN 4 THEN 'CATORCE '
  56.                             WHEN 5 THEN 'QUINCE'
  57.                             ELSE CONCAT('DIECI', XlcCadena)
  58.                         END
  59.                     WHEN XlnDecenas = 2 AND XlnUnidades = 0 THEN CONCAT('VEINTE ', XlcCadena)
  60.                     WHEN XlnDecenas = 2 AND XlnUnidades <> 0 THEN CONCAT('VEINTI', XlcCadena)
  61.                     WHEN XlnDecenas = 3 AND XlnUnidades = 0 THEN CONCAT('TREINTA ', XlcCadena)
  62.                     WHEN XlnDecenas = 3 AND XlnUnidades <> 0 THEN CONCAT('TREINTA Y ', XlcCadena)
  63.                     WHEN XlnDecenas = 4 AND XlnUnidades = 0 THEN CONCAT('CUARENTA ', XlcCadena)
  64.                     WHEN XlnDecenas = 4 AND XlnUnidades <> 0 THEN CONCAT('CUARENTA Y ', XlcCadena)
  65.                     WHEN XlnDecenas = 5 AND XlnUnidades = 0 THEN CONCAT('CINCUENTA ', XlcCadena)
  66.                     WHEN XlnDecenas = 5 AND XlnUnidades <> 0 THEN CONCAT('CINCUENTA Y ', XlcCadena)
  67.                     WHEN XlnDecenas = 6 AND XlnUnidades = 0 THEN CONCAT('SESENTA ', XlcCadena)
  68.                     WHEN XlnDecenas = 6 AND XlnUnidades <> 0 THEN CONCAT('SESENTA Y ', XlcCadena)
  69.                     WHEN XlnDecenas = 7 AND XlnUnidades = 0 THEN CONCAT('SETENTA ', XlcCadena)
  70.                     WHEN XlnDecenas = 7 AND XlnUnidades <> 0 THEN CONCAT('SETENTA Y ', XlcCadena)
  71.                     WHEN XlnDecenas = 8 AND XlnUnidades = 0 THEN CONCAT('OCHENTA ', XlcCadena)
  72.                     WHEN XlnDecenas = 8 AND XlnUnidades <> 0 THEN CONCAT('OCHENTA Y ', XlcCadena)
  73.                     WHEN XlnDecenas = 9 AND XlnUnidades = 0 THEN CONCAT('NOVENTA ', XlcCadena)
  74.                     WHEN XlnDecenas = 9 AND XlnUnidades <> 0 THEN CONCAT('NOVENTA Y ', XlcCadena)
  75.                     ELSE XlcCadena
  76.                 END; #DECENAS
  77.    
  78.             # Analizo las centenas
  79.             SET XlcCadena =
  80.                 CASE # CENTENAS
  81.                     WHEN XlnCentenas = 1 AND XlnUnidades = 0 AND XlnDecenas = 0 THEN CONCAT('CIEN ', XlcCadena)
  82.                     WHEN XlnCentenas = 1 AND NOT(XlnUnidades = 0 AND XlnDecenas = 0) THEN CONCAT('CIENTO ', XlcCadena)
  83.                     WHEN XlnCentenas = 2 THEN CONCAT('DOSCIENTOS ', XlcCadena)
  84.                     WHEN XlnCentenas = 3 THEN CONCAT('TRESCIENTOS ', XlcCadena)
  85.                     WHEN XlnCentenas = 4 THEN CONCAT('CUATROCIENTOS ', XlcCadena)
  86.                     WHEN XlnCentenas = 5 THEN CONCAT('QUINIENTOS ', XlcCadena)
  87.                     WHEN XlnCentenas = 6 THEN CONCAT('SEISCIENTOS ', XlcCadena)
  88.                     WHEN XlnCentenas = 7 THEN CONCAT('SETECIENTOS ', XlcCadena)
  89.                     WHEN XlnCentenas = 8 THEN CONCAT('OCHOCIENTOS ', XlcCadena)
  90.                     WHEN XlnCentenas = 9 THEN CONCAT('NOVECIENTOS ', XlcCadena)
  91.                     ELSE XlcCadena
  92.                 END; #CENTENAS
  93.    
  94.             # Analizo la terna
  95.             SET XlcCadena =
  96.                 CASE # TERNA
  97.                     WHEN XlnTerna = 1 THEN XlcCadena
  98.                     WHEN XlnTerna = 2 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) THEN CONCAT(XlcCadena,  'MIL ')
  99.                     WHEN XlnTerna = 3 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) AND XlnUnidades = 1 AND XlnDecenas = 0 AND XlnCentenas = 0 THEN CONCAT(XlcCadena, 'MILLON ')
  100.                     WHEN XlnTerna = 3 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) AND NOT (XlnUnidades = 1 AND XlnDecenas = 0 AND XlnCentenas = 0) THEN CONCAT(XlcCadena, 'MILLONES ')
  101.                     WHEN XlnTerna = 4 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) THEN CONCAT(XlcCadena, 'MIL MILLONES ')
  102.                     ELSE ''
  103.                 END; #TERNA
  104.    
  105.             #Armo el retorno terna a terna
  106.             SET XlcRetorno = CONCAT(XlcCadena, XlcRetorno);
  107.             SET XlnTerna = XlnTerna + 1;
  108.         END WHILE; # WHILE
  109.    
  110.         IF XlnTerna = 1 THEN SET XlcRetorno = 'CERO'; END IF;
  111.    
  112.     SET Xresultado = CONCAT(RTRIM(XlcRetorno), ' CON ', LTRIM(XlnFraccion), '/100 ', XMoneda);
  113.    
  114.     RETURN Xresultado;
  115.  
  116. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement