Escriu per cercar…

Dates

SQLite no té cap tipus per a les dates: les guarda com a text, i tu les talles, les compares i les restes amb funcions.

S'ensenya a
Bases de dadesTaulaDAMDAWDAW-BIOGestió de bases de dadesTaulaASIX

Introducció

Ja has fet servir strftime dues vegades sense que ningú te l’expliqués.

A Where, per triar els pagaments d’un dia concret.

A Group by, per agrupar-los per mes.

Les dues vegades has hagut d’embolicar la columna amb una funció abans de fer-hi res.

Aquesta pàgina és el perquè.

Entorn de treball

Continues amb sakila.db, el catàleg del videoclub de Where.

Hi tens dues taules amb dates:

  • payment, amb la data de cada pagament a payment_date.
  • rental, amb la del lloguer a rental_date i la de la devolució a return_date.

Una data és text

A Where vas veure que amb sakila no calia cap cast, perquè les seves columnes tenen tipus declarats.

payment_date està declarada timestamp.

Mira de quin tipus és de debò:

sql
select payment_date, typeof(payment_date) as tipus
from payment
limit 1;
payment_datetipus
2005-05-25 11:30:37.000text

Text.

SQLite no té cap tipus per a les dates. No n’hi ha cap.

Té cinc tipus i cap és una data: null, integer, real, text i blob.

Pots escriure timestamp, date o datetime al create table, i SQLite t’ho accepta, però el que hi guarda és text.

Per què el format importa

Si una data és text, l’ordre alfabètic és l’únic ordre que SQLite en sap.

I amb el format AAAA-MM-DD l’ordre alfabètic i l’ordre cronològic són el mateix.

sql
select date(rental_date) as dia, count(*) as lloguers
from rental
group by dia
order by dia desc
limit 3;
dialloguers
2006-02-14182
2005-08-23598
2005-08-22626

Ordenat com a text, i tot i així el darrer dia surt primer.

Ara mira què passa amb el format d’aquí, DD-MM-AAAA:

sql
select distinct strftime('%d-%m-%Y', rental_date) as dia
from rental
order by dia
limit 5;

Estàs llegint una vista prèvia.

Inicia la sessió amb Google per llegir la pàgina sencera.

Inicia la sessió amb Google

Només et demanarem que acceptis les condicions del servei.