PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Requête Postgresql entre les plages de dates

Avec les dates (et les heures), beaucoup de choses deviennent plus simples si vous utilisez >= start AND < end .

Par exemple :

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

Dans ce cas, vous devez toujours calculer la date de début du mois dont vous avez besoin, mais cela devrait être simple à bien des égards.

La date de fin est également simplifiée; il suffit d'ajouter exactement un mois. Ne plaisante pas avec le 28, le 30, le 31, etc.


Cette structure présente également l'avantage de pouvoir conserver l'utilisation des index.


De nombreuses personnes peuvent suggérer un formulaire tel que celui-ci, mais elles ne le font pas utiliser les index :

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

Cela implique de calculer les conditions pour chaque ligne de la table (un balayage) et de ne pas utiliser d'index pour trouver la plage de lignes qui correspondra (une recherche de plage).