FORMAT

La función FORMAT da formato a un número con separadores de miles y un número específico de decimales. Devuelve una cadena, no un número.

Sintaxis

FORMAT(numero, decimales)
FORMAT(numero, decimales, locale)
  • decimales: número de posiciones decimales
  • locale (opcional): formato regional (por defecto 'en_US')

Ejemplo básico

SELECT FORMAT(1234567.891, 2) AS resultado;
resultado
1,234,567.89
SELECT FORMAT(1234567.891, 0) AS sin_decimales;
sin_decimales
1,234,568

Se redondea al número de decimales indicado.

Formatear precios de productos

SELECT
    nombre,
    precio,
    CONCAT('$', FORMAT(precio, 2)) AS precio_formateado
FROM productos
LIMIT 5;
nombreprecioprecio_formateado
iPhone 15 Pro1299.99$1,299.99
MacBook Air M21199.99$1,199.99
AirPods Pro249.99$249.99
iPad Air599.99$599.99
Apple Watch Series 9399.99$399.99

Total de ventas formateado

SELECT
    CONCAT('$', FORMAT(SUM(total), 2)) AS ventas_totales,
    FORMAT(COUNT(*), 0) AS num_pedidos
FROM pedidos;

Formato regional (locale)

SELECT
    FORMAT(1234567.89, 2, 'en_US') AS ingles,
    FORMAT(1234567.89, 2, 'de_DE') AS aleman,
    FORMAT(1234567.89, 2, 'es_ES') AS espanol;
inglesalemanespanol
1,234,567.891.234.567,891.234.567,89

En español y alemán, el punto separa miles y la coma separa decimales.

FORMAT devuelve cadena

FORMAT devuelve VARCHAR, no un número. No lo uses en cálculos:

-- Esto no funciona para cálculos
SELECT FORMAT(1000, 2) + 1;
-- Resultado: 1001 (MySQL convierte, pero puede fallar con separadores de miles)
 
-- Mejor: formatear solo para presentación
SELECT FORMAT(precio * 1.21, 2) AS precio_con_iva
FROM productos
WHERE id = 1;
precio_con_iva
1,572.99

FORMAT con NULL

SELECT FORMAT(NULL, 2) AS resultado;
resultado
NULL

FORMAT con valores pequeños

SELECT
    FORMAT(0.5, 2) AS medio,
    FORMAT(0.001, 4) AS milesima,
    FORMAT(42, 2) AS entero;
mediomilesimaentero
0.500.001042.00

Con esto completamos la sección de funciones de cadena. En la siguiente sección exploraremos las funciones numéricas en MySQL.

Escrito por Eduardo Lázaro