sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL- Filtrera ett datumintervall

Din lösning är bra. Om datumen är bokstavliga, skulle jag dock föredra:

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

Detta fungerar på exakt samma sätt, men är mer underhållbart, eftersom det tydliggör poängen med att varje bokstavligt "datum" är en tidsstämpel, inte ett datum. Anta till exempel att någon någon gång ändrar din fråga till följande

    AND  datefield <=  '2012-01-01'

... förväntar sig (och misslyckas med) att inkludera hela dagen "2012-01-01" i frågan. Med den senare syntaxen är avsikten tydligare och denna förvirring förhindras.

För att göra det ännu tydligare (kanske för utförligt) kan du göra den explicita rollbesättningen:

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

Jag skulle inte använda to_date() här av liknande skäl (potentiell datatypförvirring), inte heller to_timestamp() (det returnerar en timestamptz ).

BTW, jag har modifierat fallet för att följa rekommenderad praxis (sökord med versaler, identifierare med gemener)



  1. Hur konverterar man tid till tidszonen för iPhone-enheten?

  2. Får skillnad mellan antalet två underfrågor

  3. Mitt PDO-uttalande fungerar inte

  4. MySQL-procedur inom en Select?