Fechas y horasestándar SQL

EXTRACT

Saca una parte concreta de una fecha u hora: el año, el mes, el día, la hora.

Sintaxis

EXTRACT(<campo> FROM <fecha u hora>)

Devuelve un número: YEAR, el año; MONTH, el mes del 1 al 12; DAY, el día del mes; HOUR, la hora; DOW, el día de la semana. El campo se escribe sin comillas. Útil para filtrar o agrupar por una parte de la fecha: pedidos antes del mediodía, ventas por horas.

Datos para los ejemplos

orders

idcreated_atamount
12026-07-03 10:15:00120.50
22026-07-28 18:40:0080.25
32026-08-09 09:05:00199.99
42026-08-21 14:30:0045.00
52026-09-02 11:00:0064.75

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

Año, mes y día
SELECT EXTRACT(YEAR FROM TIMESTAMP '2026-09-13 15:47') AS year,
EXTRACT(MONTH FROM TIMESTAMP '2026-09-13 15:47') AS month,
EXTRACT(DAY FROM TIMESTAMP '2026-09-13 15:47') AS day;
yearmonthday
2026913
El mes de cada pedido
SELECT id, created_at,
EXTRACT(MONTH FROM created_at) AS month
FROM orders;
idcreated_atmonth
12026-07-03 10:15:007
22026-07-28 18:40:007
32026-08-09 09:05:008
42026-08-21 14:30:008
52026-09-02 11:00:009
Pedidos hechos antes del mediodía
SELECT id, created_at
FROM orders
WHERE EXTRACT(HOUR FROM created_at) < 12;
idcreated_at
12026-07-03 10:15:00
32026-08-09 09:05:00
52026-09-02 11:00:00

Ten en cuenta

El resultado es de tipo numeric, así que los segundos pueden tener decimales: EXTRACT(SECOND FROM TIMESTAMP '2026-09-13 15:47:30.5') da 30.500000.

DOW cuenta el domingo como 0 y el lunes como 1. El orden en el que el lunes es 1 y el domingo 7 lo da ISODOW.

Agrupar por EXTRACT(MONTH FROM …) junta el mismo mes de años distintos en una sola fila. Para informes por meses, usa DATE_TRUNC('month', …).

Funciones relacionadas

Más detalles en el curso