Tema SQL
UNIX_TIMESTAMP() / FROM_UNIXTIME() (MySQL / MariaDB)
Convierte entre instantes UNIX (segundos desde 1970-01-01 UTC) y tipos DATETIME/TIMESTAMP de sesión. Muy usado en APIs y logs; PostgreSQL usa extract(epoch) o to_timestamp.
Descripción
UNIX_TIMESTAMP([fecha]) sin argumento suele significar «ahora» en segundos; con fecha convierte a epoch. FROM_UNIXTIME(segundos) hace la inversa y devuelve DATETIME en zona de la sesión. Vigila límites de año 2038 en tipos 32-bit en clientes. Para UTC explícito combina con CONVERT_TZ. No mezcles epoch con comparaciones de cadenas. En SQL Server DATEDIFF second desde 1970; en PostgreSQL extract(epoch from timestamptz).
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
UNIX_TIMESTAMP([fecha_hora])
FROM_UNIXTIME(segundos [, zona_opcional_en_funciones_recientes])
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Zona horaria
- session time_zone afecta la interpretación de DATETIME mostrado.
- Precisión
- Segundos enteros salvo versiones con microsegundos en tipos.
- PostgreSQL
- to_timestamp(unix), extract(epoch from ts).
Ejemplos
Ejemplo 1
SELECT UNIX_TIMESTAMP() AS ahora_epoch;
SELECT FROM_UNIXTIME(1735689600) AS fecha;
SELECT UNIX_TIMESTAMP(creado_en) FROM eventos WHERE id = 1;
Ejemplo 2
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CONVERT_TZ(NOW(), @@session.time_zone, '+00:00'))) AS roundtrip_utc;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.