Ir al contenido
wannacode

Funciones de fecha

En resumen: En SQLite las fechas son texto del tipo 2026-10-25, y date, strftime y julianday suman días, extraen el año o el mes y cuentan los días entre dos fechas.

Problema

¿Hasta cuándo puedo devolverlo?

Un cliente escribe: «¿Hasta cuándo puedo devolver mi pedido?» La tienda da 30 días desde la fecha del pedido. Hoy es 25 de octubre de 2026.

Contar días en un calendario es lento, y es fácil equivocarse a final de mes. Deja que lo haga la base.

La idea

Una fecha más días

En la tienda, las fechas son texto en la forma año-mes-día: 2026-10-25. Es el estándar internacional (ISO 8601). Por eso hasta ahora las fechas se han ordenado y comparado bien.

La función date(fecha, cambio) hace aritmética con fechas:

SQLbase de datos: tienda

El pedido 54 se puede devolver hasta hoy, inclusive. Los cambios pueden ser días, meses y años, hacia delante o hacia atrás, y 'start of month' da el primer día del mes:

SQLbase de datos: tienda
Más precisamente, para curiosos

Estas funciones son estrictas con la forma de la fecha. Sin el cero inicial (2026-9-30), date da NULL, y comparar como texto miente: '2026-10-25' va antes que '2026-9-30', porque «1» va antes que «9». Y '+1 month' desde el 31 de enero da el 31 de febrero, es decir, el 3 de marzo:

SQLbase de datos: tienda

Así que guarda siempre las fechas con ceros iniciales, y ten cuidado al sumar meses a los últimos días de un mes.

Pruébalo

El plazo de pago

Los pedidos nuevos (new) deben pagarse dentro de los 3 días siguientes al pedido. Muestra el número, la fecha y el plazo en una columna llamada pay_until.

SQLbase de datos: tienda

La idea

Año, mes, día

strftime(formato, fecha) saca una parte de la fecha: '%Y' es el año, '%m' el mes, '%d' el día, '%w' el día de la semana (0 es domingo, 6 es sábado).

SQLbase de datos: tienda

El resultado es texto, con cero inicial: el mes es 03, no 3.

Míralo

Registrados en marzo

Marketing quiere los clientes que se registraron en marzo, de cualquier año. Ejecuta:

SQLbase de datos: tienda
1. ¿Por qué WHERE strftime('%m', joined_at) = 3 no encuentra a nadie?

Con la misma forma, texto con cero inicial, salen dos:

SQLbase de datos: tienda

La idea

Cuántos días hay entre dos fechas

julianday(fecha) convierte la fecha en un número: cuántos días han pasado desde una fecha de inicio muy antigua. No necesitas el número en sí, pero la diferencia de dos de esos números es la cantidad de días entre las fechas.

Cuántos días llevan en la tienda los productos de cocina:

SQLbase de datos: tienda
Más precisamente, para curiosos

En un informe real, en lugar de '2026-10-25' escribirás date('now') o CURRENT_DATE: la fecha de hoy. En SQLite las dos están en UTC, no en hora local, así que cerca de la medianoche tu fecha local y la de la base pueden diferir en un día. Las lecciones usan una fecha fija para que el resultado sea el mismo cada día.

Si la fecha lleva también hora (2026-10-25 18:20:00), datetime y time funcionan como date, y julianday da también una parte de día: 12 horas son 0.5.

Pruébalo

Pagados y esperando

Los pedidos pagados (paid) todavía no se han enviado. ¿Cuántos días lleva esperando cada uno al 25 de octubre de 2026? Muestra el número, la fecha y los días en una columna llamada waiting, el que más lleva esperando primero.

SQLbase de datos: tienda

Ejercicio

Dos tareas

1. El mensajero no trabaja los domingos. ¿Qué pedidos se hicieron en domingo? Muestra el número y la fecha.

Los pedidos hechos en domingo:

SQLbase de datos: tienda

2. ¿Qué pedidos entregados todavía se pueden devolver hoy, 25 de octubre de 2026? Muestra el número, la fecha y el plazo de devolución en una columna llamada return_until.

Los pedidos entregados que todavía se pueden devolver:

SQLbase de datos: tienda

Test

Ponte a prueba

1. ¿Qué da date('2026-10-25', '+7 days')?
2. ¿Cuántos días da julianday('2026-10-25') - julianday('2026-10-01')?
3. ¿Qué condición encuentra a los clientes que se registraron en 2025?
4. ¿Por qué las lecciones escriben '2026-10-25' y no date('now')?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·