sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL- Filter een datumbereik

Jouw oplossing is prima. Als de datums letterlijk zijn, zou ik echter liever hebben:

WHERE datefield >= '2010-01-01 00:00:00' 
 AND  datefield <  '2012-01-01 00:00:00'

Dit werkt precies hetzelfde, maar is beter te onderhouden, omdat het duidelijk maakt dat elke letterlijke "datum" een tijdstempel is, geen datum. Stel bijvoorbeeld dat iemand uw zoekopdracht ooit in het volgende verandert:

    AND  datefield <=  '2012-01-01'

... verwacht (en faalt) om de volledige dag "2012-01-01" in de query op te nemen. Met de latere syntax is de bedoeling duidelijker en wordt deze verwarring voorkomen.

Om het nog duidelijker te maken (misschien te uitgebreid), kun je de expliciete cast doen:

WHERE datefield >= '2010-01-01 00:00:00'::timestamp 
 AND  datefield <  '2012-01-01 00:00:00'::timestamp

Ik zou to_date() niet gebruiken hier om soortgelijke redenen (mogelijke verwarring over gegevenstypen), noch to_timestamp() (het retourneert een timestamptz ).

Trouwens, ik heb de case aangepast om te voldoen aan de aanbevolen praktijk (zoekwoorden in hoofdletters, identifiers in kleine letters)



  1. WordPress - Ik kan niet inloggen - Er is iets mis met de tabel wp_users

  2. ORA-29908:ontbrekende primaire aanroep voor hulpoperator

  3. STRING_SPLIT() in SQL Server 2016:vervolg #2

  4. MijnISAM versus InnoDB