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 sessió amb Google per llegir la pàgina completa.

Inicia sessió amb Google

Amb qualsevol compte de Google. Només et demanarem que acceptis les condicions del servei.