Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/05/2010, 11:36
Avatar de dalyla
dalyla
 
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 21 años, 2 meses
Puntos: 1
Respuesta: Stored function de numero a letras

Bien gracias por la ayuda, la verdad es que si entiendo la diferencia entre procedure y function, lo que pasa es que es la primera que hago o modifico en este caso.

Pero me sirvio de mucho tu ayuda, muchas gracias y aqui esta el codigo por los interesados.

Código PHP:

Create 
FUNCTION letras(Numero NUMERIC(20,2),  XMoneda VARCHAR(100)) RETURNS VARCHAR(512)
DETERMINISTIC

BEGIN
DECLARE XlnEntero INT;
DECLARE 
XlcRetorno VARCHAR(512);
DECLARE 
XlnTerna INT;
DECLARE 
XlcMiles VARCHAR(512);
DECLARE 
XlcCadena VARCHAR(512);
DECLARE 
XlnUnidades INT;
DECLARE 
XlnDecenas INT;
DECLARE 
XlnCentenas INT;
DECLARE 
XlnFraccion INT;
DECLARE 
Xresultado varchar(512);

SET XlnEntero = FLOOR(XNumero);
SET XlnFraccion = (XNumero - XlnEntero) * 100;
SET XlcRetorno = '';
SET XlnTerna = 1 ;
    WHILE( 
XlnEntero > 0) DO

        
#Recorro terna por terna
        
SET XlcCadena = '';
        
SET XlnUnidades = XlnEntero MOD 10;
        
SET XlnEntero = FLOOR(XlnEntero/10);
        
SET XlnDecenas = XlnEntero MOD 10;
        
SET XlnEntero = FLOOR(XlnEntero/10);
        
SET XlnCentenas = XlnEntero MOD 10;
        
SET XlnEntero = FLOOR(XlnEntero/10);

        
#Analizo las unidades
        
SET XlcCadena =
            CASE 
# UNIDADES
                
WHEN XlnUnidades = 1 AND XlnTerna = 1 THEN CONCAT('UNO ', XlcCadena)
                
WHEN XlnUnidades = 1 AND XlnTerna <> 1 THEN CONCAT('UN ', XlcCadena)
                
WHEN XlnUnidades = 2 THEN CONCAT('DOS ', XlcCadena)
                
WHEN XlnUnidades = 3 THEN CONCAT('TRES ', XlcCadena)
                
WHEN XlnUnidades = 4 THEN CONCAT('CUATRO ', XlcCadena)
                
WHEN XlnUnidades = 5 THEN CONCAT('CINCO ', XlcCadena)
                
WHEN XlnUnidades = 6 THEN CONCAT('SEIS ', XlcCadena)
                
WHEN XlnUnidades = 7 THEN CONCAT('SIETE ', XlcCadena)
                
WHEN XlnUnidades = 8 THEN CONCAT('OCHO ', XlcCadena)
                
WHEN XlnUnidades = 9 THEN CONCAT('NUEVE ', XlcCadena)
                ELSE 
XlcCadena
            END
; #UNIDADES

        #Analizo las decenas
        
SET XlcCadena =
            CASE 
#DECENAS
                
WHEN XlnDecenas = 1 THEN
                    
CASE XlnUnidades
                        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 CONCAT('DIECI', XlcCadena)
                    
END
                WHEN XlnDecenas 
= 2 AND XlnUnidades = 0 THEN CONCAT('VEINTE ', XlcCadena)
                
WHEN XlnDecenas = 2 AND XlnUnidades <> 0 THEN CONCAT('VEINTI', XlcCadena)
                
WHEN XlnDecenas = 3 AND XlnUnidades = 0 THEN CONCAT('TREINTA ', XlcCadena)
                
WHEN XlnDecenas = 3 AND XlnUnidades <> 0 THEN CONCAT('TREINTA Y ', XlcCadena)
                
WHEN XlnDecenas = 4 AND XlnUnidades = 0 THEN CONCAT('CUARENTA ', XlcCadena)
                
WHEN XlnDecenas = 4 AND XlnUnidades <> 0 THEN CONCAT('CUARENTA Y ', XlcCadena)
                
WHEN XlnDecenas = 5 AND XlnUnidades = 0 THEN CONCAT('CINCUENTA ', XlcCadena)
                
WHEN XlnDecenas = 5 AND XlnUnidades <> 0 THEN CONCAT('CINCUENTA Y ', XlcCadena)
                
WHEN XlnDecenas = 6 AND XlnUnidades = 0 THEN CONCAT('SESENTA ', XlcCadena)
                
WHEN XlnDecenas = 6 AND XlnUnidades <> 0 THEN CONCAT('SESENTA Y ', XlcCadena)
                
WHEN XlnDecenas = 7 AND XlnUnidades = 0 THEN CONCAT('SETENTA ', XlcCadena)
                
WHEN XlnDecenas = 7 AND XlnUnidades <> 0 THEN CONCAT('SETENTA Y ', XlcCadena)
                
WHEN XlnDecenas = 8 AND XlnUnidades = 0 THEN CONCAT('OCHENTA ', XlcCadena)
                
WHEN XlnDecenas = 8 AND XlnUnidades <> 0 THEN CONCAT('OCHENTA Y ', XlcCadena)
                
WHEN XlnDecenas = 9 AND XlnUnidades = 0 THEN CONCAT('NOVENTA ', XlcCadena)
                
WHEN XlnDecenas = 9 AND XlnUnidades <> 0 THEN CONCAT('NOVENTA Y ', XlcCadena)
                ELSE 
XlcCadena
            END
; #DECENAS

        # Analizo las centenas
        
SET XlcCadena =
            CASE 
# CENTENAS
                
WHEN XlnCentenas = 1 AND XlnUnidades = 0 AND XlnDecenas = 0 THEN CONCAT('CIEN ', XlcCadena)
                
WHEN XlnCentenas = 1 AND NOT(XlnUnidades = 0 AND XlnDecenas = 0) THEN CONCAT('CIENTO ', XlcCadena)
                
WHEN XlnCentenas = 2 THEN CONCAT('DOSCIENTOS ', XlcCadena)
                
WHEN XlnCentenas = 3 THEN CONCAT('TRESCIENTOS ', XlcCadena)
                
WHEN XlnCentenas = 4 THEN CONCAT('CUATROCIENTOS ', XlcCadena)
                
WHEN XlnCentenas = 5 THEN CONCAT('QUINIENTOS ', XlcCadena)
                
WHEN XlnCentenas = 6 THEN CONCAT('SEISCIENTOS ', XlcCadena)
                
WHEN XlnCentenas = 7 THEN CONCAT('SETECIENTOS ', XlcCadena)
                
WHEN XlnCentenas = 8 THEN CONCAT('OCHOCIENTOS ', XlcCadena)
                
WHEN XlnCentenas = 9 THEN CONCAT('NOVECIENTOS ', XlcCadena)
                ELSE 
XlcCadena
            END
; #CENTENAS

        # Analizo la terna
        
SET XlcCadena =
            CASE 
# TERNA
                
WHEN XlnTerna = 1 THEN XlcCadena
                WHEN XlnTerna 
= 2 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) THEN CONCAT(XlcCadena,  'MIL ')
                
WHEN XlnTerna = 3 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) AND XlnUnidades = 1 AND XlnDecenas = 0 AND XlnCentenas = 0 THEN CONCAT(XlcCadena, 'MILLON ')
                
WHEN XlnTerna = 3 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) AND NOT (XlnUnidades = 1 AND XlnDecenas = 0 AND XlnCentenas = 0) THEN CONCAT(XlcCadena, 'MILLONES ')
                
WHEN XlnTerna = 4 AND (XlnUnidades + XlnDecenas + XlnCentenas <> 0) THEN CONCAT(XlcCadena, 'MIL MILLONES ')
                ELSE 
''
            
END; #TERNA

        #Armo el retorno terna a terna
        
SET XlcRetorno = CONCAT(XlcCadena, XlcRetorno);
        
SET XlnTerna = XlnTerna + 1;
    
END WHILE; # WHILE

    
IF XlnTerna = 1 THEN SET XlcRetorno = 'CERO'; END IF;

SET Xresultado = CONCAT(RTRIM(XlcRetorno), ' CON ', LTRIM(XlnFraccion), '/100 ', XMoneda);

RETURN 
Xresultado;

END 
Espero que el encabezado este bien ya que a final de cuentas lo termine con navicar

y gracias por tu ayuda, sin eso no creo haberlo terminado muchas gracias de veras.
__________________
Ayudar a mejorar a los demas, es hacerte mejor a ti mismo ; )