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

PostgreSQL- Filtrer et datointerval

Din løsning er fin. Hvis datoerne er bogstavelige, foretrækker jeg dog:

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

Dette udfører nøjagtigt det samme, men er mere vedligeholdeligt, fordi det tydeliggør pointen med, at hver bogstavelig "dato" er et tidsstempel, ikke en dato. Antag for eksempel, at nogen engang ændrer din forespørgsel til følgende

    AND  datefield <=  '2012-01-01'

... forventer (og undlader) at inkludere hele dagen "2012-01-01" i forespørgslen. Med den senere syntaks er hensigten mere klar, og denne forvirring forhindres.

For at gøre det endnu mere overskueligt (måske for omfattende), kan du lave den eksplicitte rollebesætning:

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

Jeg ville ikke bruge to_date() her af lignende årsager (potentiel datatypeforvirring), og heller ikke to_timestamp() (det returnerer en timestamptz ).

BTW, jeg har ændret sagen for at overholde anbefalet praksis (søgeord med store bogstaver, identifikatorer med små bogstaver)



  1. GROUP BY og aggregerede sekventielle numeriske værdier

  2. Hvordan håndhæves xmlforest creat-elementer, selvom udtryksværdien er null?

  3. MySQL-tekstkolonne afkortes

  4. nodejs mysql Fejl:Forbindelse mistet Serveren lukkede forbindelsen