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

PostgreSQL - Filtrování období

Vaše řešení je v pořádku. Pokud jsou data doslovná, preferuji však:

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

To funguje úplně stejně, ale je lépe udržovatelné, protože je jasné, že každé doslovné „datum“ je časové razítko, nikoli datum. Předpokládejme například, že někdy někdo změní váš dotaz na následující

    AND  datefield <=  '2012-01-01'

... očekáváte (a nedaří se) zahrnout do dotazu celý den „2012-01-01“. S pozdější syntaxí je záměr jasnější a tomuto zmatku je zabráněno.

Aby to bylo ještě jasnější (možná příliš upovídané), můžete provést explicitní obsazení:

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

Nepoužil bych to_date() zde z podobných důvodů (potenciální záměna datových typů), ani to_timestamp() (vrátí timestamptz ).

BTW, upravil jsem velikost písmen tak, aby odpovídal doporučené praxi (klíčová slova velkými písmeny, identifikátory malými písmeny)



  1. Heroku – ActionView::Template::Error (PG::Error:ERROR:sloupec category_products.desc neexistuje

  2. Jak získám data z více souvisejících tabulek v Postgresu?

  3. Jaký dotaz bych použil k získání sourozeneckých záznamů při použití uzavíracích tabulek?

  4. Chápu špatně spoje?