PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:filtra un intervallo di date

La tua soluzione va bene. Se le date sono letterali, preferirei però:

WHERE datefield >= '2010-01-01 00:00:00' 
 AND  datefield <  '2012-01-01 00:00:00'

Funziona esattamente allo stesso modo, ma è più manutenibile, perché chiarisce il punto in cui ogni "data" letterale è un timestamp, non una data. Ad esempio, supponi che a volte qualcuno modifichi la tua query come segue

    AND  datefield <=  '2012-01-01'

... prevedendo (e non riuscendo) di includere l'intera giornata "2012-01-01" nella query. Con la sintassi successiva, l'intenzione è più chiara e questa confusione è prevenuta.

Per renderlo ancora più chiaro (forse troppo dettagliato), puoi eseguire il cast esplicito:

WHERE datefield >= '2010-01-01 00:00:00'::timestamp 
 AND  datefield <  '2012-01-01 00:00:00'::timestamp

Non userei to_date() qui per ragioni simili (potenziale confusione tra i tipi di dati), né to_timestamp() (restituisce un timestamptz ).

A proposito, ho modificato il caso per conformarsi alla pratica consigliata (parole chiave in maiuscolo, identificatori in minuscolo)