Saltar al contenido

Como convertir monto a letra en mysql

Convertir monto a letra en MySQL puede ser compleja de trabajar por lo cual te muestro la solucion que puedes aplicar a cualquier version de MySQL evitando escribir clases o funciones desde un lenguaje de programación.

Índice

    Como convertir monto a letra en mysql?

    Para convertir un monto a letra en mysql, se puede utilizar una función de usuario (UDF) que contenga el código necesario para realizar la conversión. Sin embargo, debido a la complejidad de la tarea, no existe una función de conversión de números a letras incorporada en SQL.

    Es importante mencionar que la funcionalidad de conversión de números a letras no es algo común en las bases de datos y su implementación puede ser compleja, y puede variar dependiendo del lenguaje de programación y la base de datos que se utilice.

    Cuando usar esta función ?

    La función para dar formato de letras a los numeros puede tener varias según el requiemiento pueden ser :

    • para imprimir cheques o facturas, donde se requiere escribir el valor del monto pagado en letras.
    • Procesos de cobros, donde se requiere convertir el monto pendiente en letras.
    • para fines de procesos legales donde debemos imprimir un contrato con los montos en letras

    En cualquier caso, la función de int a string es distinta a la de montos a letras puesto que en la primera solo marco el mismo numero para concatenar valores de moneda y en la segundo requiero convertir el valor en un formato para lectura.

    Ejemplo función para convertir a letras

    Para manejar números hasta el millón, puedes modificar la función anterior para manejar los diferentes bloques de 3 dígitos que componen un número mayor a 999. Aquí hay un ejemplo de cómo podría verse la función modificada:

    DELIMITER $$
    
    CREATE PROCEDURE NumeroALetras (IN numero INT)
    BEGIN
    DECLARE unidades, decenas, centenas, letras VARCHAR(100);
    
    SET unidades =
    CASE
    WHEN numero % 10 = 1 THEN 'UN'
    WHEN numero % 10 = 2 THEN 'DOS'
    WHEN numero % 10 = 3 THEN 'TRES'
    WHEN numero % 10 = 4 THEN 'CUATRO'
    WHEN numero % 10 = 5 THEN 'CINCO'
    WHEN numero % 10 = 6 THEN 'SEIS'
    WHEN numero % 10 = 7 THEN 'SIETE'
    WHEN numero % 10 = 8 THEN 'OCHO'
    WHEN numero % 10 = 9 THEN 'NUEVE'
    ELSE ''
    END;
    
    SET decenas =
    CASE
    WHEN numero >= 90 THEN 'NOVENTA '
    WHEN numero >= 80 THEN 'OCHENTA '
    WHEN numero >= 70 THEN 'SETENTA '
    WHEN numero >= 60 THEN 'SESENTA '
    WHEN numero >= 50 THEN 'CINCUENTA '
    WHEN numero >= 40 THEN 'CUARENTA '
    WHEN numero >= 30 THEN 'TREINTA '
    WHEN numero >= 20 THEN 'VEINTE '
    ELSE ''
    END;
    
    SET centenas =
    CASE
    WHEN numero >= 100 THEN 'CIENTO '
    WHEN numero >= 200 THEN 'DOSCIENTOS '
    WHEN numero >= 300 THEN 'TRESCIENTOS '
    WHEN numero >= 400 THEN 'CUATROCIENTOS '
    WHEN numero >= 500 THEN 'QUINIENTOS '
    WHEN numero >= 600 THEN 'SEISCIENTOS '
    WHEN numero >= 700 THEN 'SETECIENTOS '
    WHEN numero >= 800 THEN 'OCHOCIENTOS '
    WHEN numero >= 900 THEN 'NOVECIENTOS '
    ELSE ''
    END;
    
    SET letras = centenas + decenas + unidades;
    
    IF numero = 0 THEN
    SET letras = 'CERO';
    END IF;
    
    IF numero >= 10 AND numero <= 19 THEN
    SET letras =
    CASE
    WHEN numero = 10 THEN 'DIEZ'
    WHEN numero = 11 THEN 'ONCE'
    WHEN numero = 12 THEN 'DOCE'
    WHEN numero = 13 THEN 'TRECE'
    WHEN numero = 14 THEN 'CATORCE'
    WHEN numero = 15 THEN 'QUINCE'
    WHEN numero = 16 THEN 'DIECISEIS'
    WHEN numero = 17 THEN 'DIECISIETE'
    WHEN numero = 18 THEN 'DIECIOCHO'
    WHEN numero = 19 THEN 'DIECINUEVE'
    END;
    END IF;
    
    SELECT letras;
    END$$
    
    DELIMITER ;

    Como pudimos ver en esta función utilizamos muchas de las funcion de cadenas de caracteres que conocemos tal es el caso de la funcion Substring de sql ademas de la Clausula IF para poder separar los montos.

    El uso de la función convert pude tambien hacerlo con el cast permite convertir el numero a formato texto par poder manipular y transformar el numero a letra. como podemos ver el uso de la clausula case es impresidible para transformar en letras.

    Para llamar esa funcion solo debes hacer lo siguiente:

    CALL NumeroALetras(121);

    #devuelve «CIENTO VEINTIUNO»

    Como usar esta funcion desde PHP ?

    Puedes llamar el procedimiento almacenado en MySQL desde PHP usando la función mysqli_query(). Aquí hay un ejemplo de código en PHP que llama el procedimiento y muestra el resultado:

    <?php
    $numero = 121;
    
    //Conexión a la base de datos
    $conn = mysqli_connect("host", "usuario", "contraseña", "base_de_datos");
    
    //Llamada al procedimiento
    $result = mysqli_query($conn, "CALL NumeroALetras($numero)");
    
    //Recuperación del resultado
    $row = mysqli_fetch_assoc($result);
    
    //Mostrando el resultado
    echo $row['letras'];
    
    //Cerrando la conexión
    mysqli_close($conn);
    ?>
    

    Este código muestra el resultado «CIENTO VEINTIUNO».

    Recordando que es importante conocer los parametros de la cadena de conexion en mysql para saber como conectarse.

    En conclusion

    Mi conclusión es que la función que convierte un número a letras puede ser útil en diversas aplicaciones, especialmente en el ámbito financiero o administrativo donde se requiere presentar cantidades en forma escrita. Sin embargo, debido a la complejidad de la lógica y la cantidad de casos específicos que pueden surgir, es importante tener en cuenta que la implementación puede ser un desafío y requiere un conocimiento profundo del lenguaje de programación utilizado.

    En el caso de MySQL y PHP, la creación de un procedimiento almacenado y su llamada desde una aplicación PHP son una buena forma de resolver este problema y lograr una solución eficiente y escalable. Sin embargo, es importante tener en cuenta la seguridad y el rendimiento al crear y utilizar procedimientos almacenados en un entorno de producción.

    ahora comentanos que tal te funciono.