sql >> Database >  >> RDS >> PostgreSQL

Postgresql-query tussen datumbereiken

Met datums (en tijden) worden veel dingen eenvoudiger als je >= start AND < end . gebruikt .

Bijvoorbeeld:

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

In dit geval moet je nog steeds de startdatum van de maand die je nodig hebt berekenen, maar dat zou op een aantal manieren eenvoudig moeten zijn.

Ook de einddatum is vereenvoudigd; voeg gewoon precies een maand toe. Geen gedoe met 28e, 30e, 31e, etc.


Deze structuur heeft ook het voordeel dat het gebruik van indexen kan behouden.


Veel mensen kunnen een formulier als het volgende voorstellen, maar niet gebruik indexen:

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

Dit houdt in dat de voorwaarden voor elke afzonderlijke rij in de tabel worden berekend (een scan) en dat er geen index wordt gebruikt om het rijbereik te vinden dat overeenkomt (een bereikzoeken).



  1. Het raiserror-bericht van SqlServer opslaan in C#

  2. Wat is de grootte van de kolom van int(11) in mysql in bytes?

  3. Doctrine Query Language krijgt Max/Laatste rij per groep

  4. Hoe JPA-entiteiten vernieuwen wanneer de backend-database asynchroon verandert?