0Pricing
SQL Academy · Lección

EXTRACT, DATE_TRUNC y AGE

Extraiga partes de una fecha con EXTRACT, ajuste marcas de tiempo a un límite con DATE_TRUNC y calcule diferencias legibles con AGE.

EXTRACT, DATE_TRUNC y AGE es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

EXTRACT: extraer una parte de una fecha

EXTRACT(part FROM ts) devuelve un único componente numérico:

SELECT EXTRACT(YEAR  FROM created_at) AS yr,
       EXTRACT(MONTH FROM created_at) AS mo,
       EXTRACT(DAY   FROM created_at) AS d,
       EXTRACT(DOW   FROM created_at) AS day_of_week
FROM orders;

Partes habituales de EXTRACT

Partes útiles: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, DOW (0=Sun), DOY (1–366), WEEK, QUARTER, EPOCH.

SELECT EXTRACT(EPOCH FROM (NOW() - created_at)) AS seconds_ago
FROM events;

DATE_TRUNC: ajustar a un límite

DATE_TRUNC(unit, ts) pone a cero todo lo que está por debajo de la unidad; es la función más útil para los informes agrupados por intervalos:

SELECT date_trunc('day',   NOW());   -- 2024-03-15 00:00:00
SELECT date_trunc('week',  NOW());
SELECT date_trunc('month', NOW());
SELECT date_trunc('hour',  NOW());

Informes agrupados por intervalos

Ingresos mensuales mediante date_trunc:

SELECT date_trunc('month', created_at) AS month,
       SUM(total) AS revenue
FROM orders
GROUP BY 1
ORDER BY 1;

Acumulado del año y del mes

Compare el periodo actual con el mismo punto del año anterior:

-- This month so far
SELECT SUM(total) FROM orders
WHERE created_at >= date_trunc('month', NOW())
  AND created_at <  date_trunc('month', NOW()) + INTERVAL '1 month';

AGE: diferencia según el calendario

AGE devuelve años, meses y días, no solo días:

SELECT AGE('2024-03-15', '2020-12-01');
-- → '3 years 3 months 14 days'

SELECT EXTRACT(YEAR FROM AGE('2024-03-15', '2020-12-01'));  -- 3

Comportamiento de AGE con dos argumentos

AGE con un solo argumento compara con current_date:

SELECT AGE(birth_date) FROM users LIMIT 5;

Lógica del día de la semana

EXTRACT(DOW): 0=domingo … 6=sábado. ISO_DOW: 1=lunes … 7=domingo.

SELECT * FROM orders
WHERE EXTRACT(ISODOW FROM created_at) IN (6, 7);  -- weekend orders

Zona horaria en EXTRACT

EXTRACT sobre TIMESTAMPTZ usa la zona horaria de la sesión. Utilice AT TIME ZONE para controlarla:

SELECT EXTRACT(HOUR FROM created_at AT TIME ZONE 'UTC') FROM events;
SELECT EXTRACT(HOUR FROM created_at AT TIME ZONE 'Europe/Berlin') FROM events;

Truncar por una ventana personalizada

Para ventanas que no siguen el calendario (cada 5 minutos), use aritmética:

SELECT to_timestamp(
  floor(EXTRACT(EPOCH FROM created_at) / 300) * 300
) AS bucket_5min,
COUNT(*)
FROM events
GROUP BY 1
ORDER BY 1;

Índices funcionales para truncar

Si usa date_trunc('day', created_at) con frecuencia en GROUP BY, un índice funcional puede ayudar:

CREATE INDEX events_day_idx ON events ((date_trunc('day', created_at)));

Repaso

EXTRACT, DATE_TRUNC y AGE cubren la mayoría de las necesidades de generación de informes.

  • EXTRACT para partes individuales
  • DATE_TRUNC para ajustar a un límite
  • AGE para intervalos que tienen en cuenta el calendario

Comprobación rápida

Quiere obtener un recuento mensual de usuarios nuevos. ¿Qué función agrupa las fechas por mes?

Preguntas frecuentes

¿La lección «EXTRACT, DATE_TRUNC y AGE» es gratis?

Sí — el texto completo de «EXTRACT, DATE_TRUNC y AGE» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «EXTRACT, DATE_TRUNC y AGE»?

Extraiga partes de una fecha con EXTRACT, ajuste marcas de tiempo a un límite con DATE_TRUNC y calcule diferencias legibles con AGE. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «EXTRACT, DATE_TRUNC y AGE»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Aritmética de fechas e INTERVAL
  2. EXTRACT, DATE_TRUNC y AGE
  3. Zonas horarias: TIMESTAMP frente a TIMESTAMPTZ
  4. Informes habituales de fechas (MTD, WoW, YoY)
← Volver a SQL Academy