Twoje rozwiązanie jest w porządku. Jeśli daty są dosłowne, wolałbym jednak:
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
Działa to dokładnie tak samo, ale jest łatwiejsze w utrzymaniu, ponieważ wyjaśnia, że każda dosłowna „data” jest znacznikiem czasu, a nie datą. Załóżmy na przykład, że ktoś zmieni zapytanie na następujące
AND datefield <= '2012-01-01'
... oczekiwano (i nie powiodło się) uwzględnienia w zapytaniu pełnego dnia „2012-01-01”. Dzięki późniejszej składni intencja jest bardziej jasna i zapobiega to nieporozumieniom.
Aby było to jeszcze bardziej jasne (być może zbyt gadatliwe), możesz wykonać wyraźne rzutowanie:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
Nie użyłbym to_date()
tutaj z podobnych powodów (potencjalne pomylenie typów danych), ani to_timestamp()
(zwraca timestamptz
).
BTW, zmodyfikowałem sprawę, aby była zgodna z zalecaną praktyką (słowa kluczowe pisane wielkimi literami, identyfikatory pisane małymi literami)