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

Query Postgresql tra intervalli di date

Con le date (e gli orari) molte cose diventano più semplici se usi >= start AND < end .

Ad esempio:

SELECT
  user_id
FROM
  user_logs
WHERE
      login_date >= '2014-02-01'
  AND login_date <  '2014-03-01'

In questo caso devi ancora calcolare la data di inizio del mese di cui hai bisogno, ma dovrebbe essere semplice in molti modi.

Anche la data di fine è semplificata; basta aggiungere esattamente un mese. Nessun problema con il 28, 30, 31, ecc.


Questa struttura ha anche il vantaggio di poter mantenere l'uso degli indici.


Molte persone possono suggerire un modulo come il seguente, ma non usa gli indici:

WHERE
      DATEPART('year',  login_date) = 2014
  AND DATEPART('month', login_date) = 2

Ciò comporta il calcolo delle condizioni per ogni singola riga della tabella (una scansione) e non l'utilizzo di index per trovare l'intervallo di righe che corrisponderanno (una ricerca di intervallo).