sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql dotaz mezi obdobími

S daty (a časy) se mnoho věcí zjednoduší, pokud použijete >= start AND < end .

Například:

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

V tomto případě stále musíte vypočítat počáteční datum měsíce, který potřebujete, ale to by mělo být přímočaré mnoha způsoby.

Koncové datum je také zjednodušeno; stačí přidat přesně jeden měsíc. Žádné zahrávání si s 28., 30., 31. atd.


Tato struktura má také výhodu v tom, že je schopna zachovat používání indexů.


Mnoho lidí může navrhnout formulář, jako je následující, ale nedělá použijte indexy:

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

To zahrnuje výpočet podmínek pro každý jednotlivý řádek v tabulce (skenování) a nepoužívání indexu k nalezení rozsahu řádků, které se budou shodovat (prohledávání rozsahu).



  1. Odstranění dotazu Oracle trvá příliš dlouho

  2. Implementace Optimistic Locking v Oracle

  3. Příklady MAKETIME() – MySQL

  4. Získejte názvy tabulek pomocí příkazu SELECT v MySQL