Вашето решение е добро. Ако датите са буквални, бих предпочел обаче:
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
Това работи точно по същия начин, но е по-поддържано, защото изяснява смисъла на всяка буквална "дата" да бъде клеймо за време, а не дата. Да предположим например, че някога някой промени вашата заявка на следното
AND datefield <= '2012-01-01'
... очаква (и не успява) да включи целия ден "2012-01-01" в заявката. С по-късния синтаксис намерението е по-ясно и това объркване е предотвратено.
За да стане още по-ясно (може би твърде многословно), можете да направите изричното прехвърляне:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
Не бих използвал to_date()
тук поради подобни причини (потенциално объркване на типа данни), нито to_timestamp()
(връща timestamptz
).
Между другото, промених регистъра, за да отговаря на препоръчителната практика (ключови думи с главни букви, идентификатори с малки)