GET_FORMAT
La función GET_FORMAT devuelve una cadena de formato predefinida que corresponde a estándares internacionales de representación de fechas y horas. En lugar de memorizar los especificadores de formato como %d.%m.%Y o %Y-%m-%d, puedes usar GET_FORMAT para obtener automáticamente el formato correcto según el estándar que necesites, ya sea europeo, estadounidense, japonés o ISO.
Esta función resulta especialmente útil cuando tu aplicación debe presentar fechas en distintos formatos según la región del usuario. Combinada con DATE_FORMAT o STR_TO_DATE, permite estandarizar la entrada y salida de fechas sin escribir manualmente cada cadena de formato.
Sintaxis
GET_FORMAT({DATE | TIME | DATETIME}, {'EUR' | 'USA' | 'JIS' | 'ISO' | 'INTERNAL'})El primer argumento indica el tipo de dato: DATE, TIME o DATETIME. El segundo argumento especifica el estándar de formato deseado. Los estándares disponibles son EUR (europeo), USA (estadounidense), JIS (estándar industrial japonés), ISO (ISO 8601) e INTERNAL (formato numérico interno de MySQL).
Comportamiento básico
Para entender qué devuelve cada combinación, conviene ver los resultados de todos los formatos de fecha.
SELECT
GET_FORMAT(DATE, 'EUR') AS fecha_eur,
GET_FORMAT(DATE, 'USA') AS fecha_usa,
GET_FORMAT(DATE, 'JIS') AS fecha_jis,
GET_FORMAT(DATE, 'ISO') AS fecha_iso,
GET_FORMAT(DATE, 'INTERNAL') AS fecha_internal;| fecha_eur | fecha_usa | fecha_jis | fecha_iso | fecha_internal |
|---|---|---|---|---|
| %d.%m.%Y | %m.%d.%Y | %Y-%m-%d | %Y-%m-%d | %Y%m%d |
El formato europeo coloca el día primero, el estadounidense coloca el mes primero, mientras que JIS e ISO usan el formato internacional con el año al inicio separado por guiones. El formato INTERNAL elimina los separadores y produce una cadena numérica compacta.
Los formatos para TIME también varían según el estándar.
SELECT
GET_FORMAT(TIME, 'EUR') AS hora_eur,
GET_FORMAT(TIME, 'USA') AS hora_usa,
GET_FORMAT(TIME, 'JIS') AS hora_jis,
GET_FORMAT(TIME, 'ISO') AS hora_iso,
GET_FORMAT(TIME, 'INTERNAL') AS hora_internal;| hora_eur | hora_usa | hora_jis | hora_iso | hora_internal |
|---|---|---|---|---|
| %H.%i.%s | %h:%i:%s %p | %H:%i:%s | %H:%i:%s | %H%i%s |
Observa que el formato USA utiliza reloj de 12 horas con indicador AM/PM (%h:%i:%s %p), mientras que los demás usan reloj de 24 horas. El formato europeo usa puntos como separador en lugar de dos puntos.
Para DATETIME, las cadenas combinan fecha y hora.
SELECT
GET_FORMAT(DATETIME, 'EUR') AS dt_eur,
GET_FORMAT(DATETIME, 'USA') AS dt_usa,
GET_FORMAT(DATETIME, 'JIS') AS dt_jis,
GET_FORMAT(DATETIME, 'ISO') AS dt_iso,
GET_FORMAT(DATETIME, 'INTERNAL') AS dt_internal;| dt_eur | dt_usa | dt_jis | dt_iso | dt_internal |
|---|---|---|---|---|
| %Y-%m-%d %H.%i.%s | %Y-%m-%d %H.%i.%s | %Y-%m-%d %H:%i:%s | %Y-%m-%d %H:%i:%s | %Y%m%d%H%i%s |
Caso práctico: formatear fechas según la región del usuario
Una aplicación multilingüe almacena las fechas en formato estándar y las presenta según la preferencia regional del usuario. En lugar de codificar cada formato, GET_FORMAT combinada con DATE_FORMAT hace el trabajo.
SELECT
p.id,
p.nombre,
DATE_FORMAT(p.fecha_pedido, GET_FORMAT(DATE, 'EUR')) AS fecha_europa,
DATE_FORMAT(p.fecha_pedido, GET_FORMAT(DATE, 'USA')) AS fecha_eeuu,
DATE_FORMAT(p.fecha_pedido, GET_FORMAT(DATE, 'ISO')) AS fecha_iso
FROM pedidos p
ORDER BY p.fecha_pedido DESC
LIMIT 4;| id | nombre | fecha_europa | fecha_eeuu | fecha_iso |
|---|---|---|---|---|
| 3421 | María García | 14.02.2026 | 02.14.2026 | 2026-02-14 |
| 3420 | Carlos Mendoza | 13.02.2026 | 02.13.2026 | 2026-02-13 |
| 3419 | Laura Fernández | 12.02.2026 | 02.12.2026 | 2026-02-12 |
| 3418 | Pedro Ruiz | 11.02.2026 | 02.11.2026 | 2026-02-11 |
Un cliente en Alemania verá 14.02.2026 (día.mes.año), mientras que un cliente en Estados Unidos verá 02.14.2026 (mes.día.año). Ambos provienen de la misma columna, pero se presentan según la convención local.
Caso práctico: parsear fechas con STR_TO_DATE
Cuando recibes fechas como cadenas de texto en diferentes formatos regionales, GET_FORMAT combinada con STR_TO_DATE permite convertirlas correctamente a valores DATE de MySQL.
SELECT
STR_TO_DATE('14.02.2026', GET_FORMAT(DATE, 'EUR')) AS desde_formato_europeo,
STR_TO_DATE('02.14.2026', GET_FORMAT(DATE, 'USA')) AS desde_formato_usa,
STR_TO_DATE('2026-02-14', GET_FORMAT(DATE, 'ISO')) AS desde_formato_iso;| desde_formato_europeo | desde_formato_usa | desde_formato_iso |
|---|---|---|
| 2026-02-14 | 2026-02-14 | 2026-02-14 |
Las tres cadenas representan la misma fecha, pero están escritas en formatos distintos. Gracias a GET_FORMAT, no necesitas recordar que el formato europeo es %d.%m.%Y ni que el estadounidense es %m.%d.%Y; la función proporciona la cadena de formato correcta automáticamente.
Esto es particularmente valioso al importar datos desde archivos CSV generados en diferentes países.
SELECT
STR_TO_DATE(fecha_texto, GET_FORMAT(DATE, 'EUR')) AS fecha_parseada,
producto,
cantidad
FROM importacion_temporal
WHERE STR_TO_DATE(fecha_texto, GET_FORMAT(DATE, 'EUR')) IS NOT NULL
LIMIT 3;| fecha_parseada | producto | cantidad |
|---|---|---|
| 2026-01-15 | Laptop HP 15 | 25 |
| 2026-01-22 | Monitor Samsung | 40 |
| 2026-02-03 | Teclado Logitech | 100 |
Caso práctico: formatear hora en estilo americano
El formato de hora estadounidense con AM/PM es una necesidad frecuente al generar reportes para mercados de habla inglesa.
SELECT
e.nombre,
e.hora_entrada,
TIME_FORMAT(e.hora_entrada, GET_FORMAT(TIME, 'USA')) AS hora_formato_usa,
TIME_FORMAT(e.hora_entrada, GET_FORMAT(TIME, 'EUR')) AS hora_formato_eur
FROM empleados e
WHERE e.departamento = 'Ventas'
LIMIT 4;| nombre | hora_entrada | hora_formato_usa | hora_formato_eur |
|---|---|---|---|
| Ana Martínez | 08:00:00 | 08:00:00 AM | 08.00.00 |
| Carlos López | 09:30:00 | 09:30:00 AM | 09.30.00 |
| Laura Gómez | 14:00:00 | 02:00:00 PM | 14.00.00 |
| Pedro Sánchez | 16:45:00 | 04:45:00 PM | 16.45.00 |
El formato USA convierte automáticamente las horas de la tarde al formato de 12 horas con el indicador PM, algo que en formato europeo se representa con el reloj de 24 horas.
Manejo de NULL
GET_FORMAT nunca recibe valores de columna que puedan ser NULL, ya que sus argumentos son constantes literales (DATE, TIME, DATETIME y el nombre del estándar). Sin embargo, cuando se combina con DATE_FORMAT y la columna de fecha es NULL, el resultado será NULL.
SELECT
nombre,
fecha_nacimiento,
COALESCE(
DATE_FORMAT(fecha_nacimiento, GET_FORMAT(DATE, 'EUR')),
'No registrada'
) AS fecha_formateada
FROM clientes
LIMIT 3;| nombre | fecha_nacimiento | fecha_formateada |
|---|---|---|
| María García | 1990-06-15 | 15.06.1990 |
| Carlos López | NULL | No registrada |
| Laura Sánchez | 1998-03-08 | 08.03.1998 |
El uso de COALESCE permite proporcionar un texto alternativo cuando la fecha no está disponible.
Combinación con otras funciones
Además de DATE_FORMAT y STR_TO_DATE, GET_FORMAT se puede usar dentro de la variable de sistema date_format para cambiar el formato de fecha por defecto de toda la sesión.
SET @formato_fecha = GET_FORMAT(DATE, 'EUR');
SELECT @formato_fecha AS formato;| formato |
|---|
| %d.%m.%Y |
También puedes construir formatos personalizados concatenando partes de los formatos predefinidos con CONCAT.
SELECT
DATE_FORMAT(
NOW(),
CONCAT(GET_FORMAT(DATE, 'EUR'), ' ', GET_FORMAT(TIME, 'JIS'))
) AS fecha_hora_personalizada;| fecha_hora_personalizada |
|---|
| 14.02.2026 22:30:15 |
Esta consulta combina el formato de fecha europeo con el formato de hora JIS (que usa dos puntos como separador), creando una representación personalizada que toma lo mejor de cada estándar.
En el siguiente artículo veremos PERIOD_ADD para sumar meses a un período.
Escrito por Eduardo Lázaro
