CodeGym /Cursos /SQL SELF /Funciones para obtener la fecha y hora actual: NOW...

Funciones para obtener la fecha y hora actual: NOW(), CURRENT_DATE, CURRENT_TIME

SQL SELF
Nivel 31, Lección 1
Disponible

PostgreSQL trae varias funciones integradas para trabajar con valores temporales actuales. Estas funciones son útiles para tareas como registrar automáticamente cuándo se crea un registro, hacer informes basados en la fecha actual o chequear si un evento pasó en un periodo específico. Vamos a ver tres funciones principales: NOW(), CURRENT_DATE y CURRENT_TIME.

NOW(): obtener la fecha y hora actual

La función NOW() devuelve la fecha y hora actual en formato TIMESTAMP WITH TIME ZONE. O sea, el resultado incluye la hora exacta teniendo en cuenta la zona horaria del servidor.

Ejemplo:

SELECT NOW();
-- Resultado: 2025-05-25 14:30:45.761523+03

Fíjate que el resultado incluye:

  • la fecha (2025-05-25),
  • la hora (14:30:45.761523),
  • la zona horaria (+03).

Si no necesitas la zona horaria, puedes convertir el resultado explícitamente a TIMESTAMP:

SELECT NOW()::TIMESTAMP;
-- Resultado: 2025-05-25 14:30:45.761523

CURRENT_DATE: obtener la fecha actual

La función CURRENT_DATE devuelve solo la fecha actual sin la hora. El tipo de dato devuelto es DATE.

Ejemplo:

SELECT CURRENT_DATE;
-- Resultado: 2025-05-25

Esto es útil si no te importa la hora, por ejemplo, para calcular edades o agrupar datos por día.

CURRENT_TIME: obtener la hora actual

La función CURRENT_TIME devuelve la hora actual en formato TIME WITH TIME ZONE. Si no te interesa la zona horaria, puedes convertir el resultado a TIME.

Ejemplo:

SELECT CURRENT_TIME;
-- Resultado: 14:30:45.761523+03

SELECT CURRENT_TIME::TIME;
-- Resultado: 14:30:45.761523

Ejemplos de uso de las funciones

Vamos a ver algunos ejemplos prácticos donde estas funciones pueden ser útiles.

Rellenar automáticamente la fecha de creación de un registro

Cuando agregamos registros a una tabla, muchas veces es útil guardar automáticamente la fecha y hora de creación. En PostgreSQL, puedes hacerlo poniendo DEFAULT NOW() al crear la tabla.

Ejemplo de creación de tabla:

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_name TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT NOW() -- momento de creación de la fila
);

Agregar un registro:

INSERT INTO orders (customer_name) VALUES ('Otto Lin');

Vamos a ver el contenido de la tabla:

SELECT * FROM orders;

Resultado:

id customer_name created_at
1 Otto Lin 2024-11-25 14:45:12.154678

Filtrar datos por fecha

Supón que tienes una tabla de pedidos y quieres seleccionar todos los pedidos creados hoy. Usamos la función CURRENT_DATE para filtrar:

SELECT *
FROM orders
WHERE created_at::DATE = CURRENT_DATE;

Aquí usamos la conversión created_at::DATE para quitar la hora y quedarnos solo con la fecha.

Diferencias entre NOW() y CURRENT_TIMESTAMP

A primera vista, parece que NOW() y CURRENT_TIMESTAMP hacen lo mismo. Y sí, es así. Solo que la función NOW() viene de un estándar y CURRENT_TIMESTAMP de otro.

NOW() — función de PostgreSQL

La función NOW() es una función integrada de PostgreSQL que devuelve un valor de tipo TIMESTAMP WITH TIME ZONE (timestamptz). Es la hora actual del servidor en el momento de empezar la consulta SQL.

Ejemplo:

SELECT NOW();

CURRENT_TIMESTAMP — estándar SQL

CURRENT_TIMESTAMP es una expresión definida por el estándar SQL, y también devuelve TIMESTAMP WITH TIME ZONE en PostgreSQL. Básicamente, PostgreSQL implementa CURRENT_TIMESTAMP llamando a la misma función que NOW().

Ejemplo:

SELECT CURRENT_TIMESTAMP;

Comparación en la práctica

SELECT NOW(), CURRENT_TIMESTAMP;

Resultado:

now current_timestamp
2025-05-25 14:30:45+03 2025-05-25 14:30:45+03

Ambos valores son iguales porque se calculan en el mismo momento — al inicio de la consulta.

Usar funciones de tiempo en condiciones de filtrado

Ahora vamos a escribir una consulta que selecciona los registros creados en los últimos 7 días. Para eso puedes usar NOW() con operaciones aritméticas sobre fechas:

SELECT *
FROM orders
WHERE created_at >= NOW() - INTERVAL '7 days';

De forma parecida, si quieres seleccionar pedidos del mes actual, puedes usar la función DATE_TRUNC() para recortar el inicio del mes:

SELECT *
FROM orders
WHERE created_at >= DATE_TRUNC('month', NOW());

DATE_TRUNC() es una función interesante, te cuento más sobre ella en un par de clases :P

Consejos prácticos

  • Usa NOW() o CURRENT_TIMESTAMP si necesitas la hora exacta con zona horaria.
  • Aplica CURRENT_DATE si solo te interesa la fecha (por ejemplo, para calcular edades o analizar eventos de un día concreto).
  • CURRENT_TIME se usa sobre todo para mostrar la hora en informes o interfaces donde importa cuánto tiempo se gastó en una tarea.

En la próxima clase vamos a empezar a extraer partes de fechas y horas usando las funciones EXTRACT() y AGE(). Con ellas puedes, por ejemplo, calcular fácilmente la edad de una persona o trabajar con datos por días, meses o años.

2
Tarea
SQL SELF, nivel 31, lección 1
Bloqueada
Obtener la fecha actual
Obtener la fecha actual
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION