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

Postgresql-forespørgsel mellem datointervaller

Med datoer (og tidspunkter) bliver mange ting nemmere, hvis du bruger >= start AND < end .

For eksempel:

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

I dette tilfælde skal du stadig beregne startdatoen for den måned, du har brug for, men det burde være ligetil på en række måder.

Slutdatoen er også forenklet; bare tilføje præcis en måned. Ingen roder med 28., 30., 31. osv.


Denne struktur har også den fordel, at den er i stand til at opretholde brugen af ​​indekser.


Mange mennesker kan foreslå en formular som den følgende, men de ikke brug indekser:

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

Dette involverer at beregne betingelserne for hver enkelt række i tabellen (en scanning) og ikke bruge indeks til at finde rækkevidden af ​​rækker, der vil matche (en interval-seek).



  1. MySQL fejl 1064 syntaks, men alt virker fint

  2. Liste over fremmednøgler og de tabeller, de refererer til i Oracle DB

  3. Dynamisk overvågning af PostgreSQL-forekomster ved hjælp af pg_top

  4. overføre LIMIT som parametre til MySQL sproc