Solusi Anda baik-baik saja. Jika tanggalnya literal, saya lebih suka:
WHERE datefield >= '2010-01-01 00:00:00'
AND datefield < '2012-01-01 00:00:00'
Ini melakukan persis sama, tetapi lebih dapat dipertahankan, karena memperjelas poin dari setiap "tanggal" literal menjadi stempel waktu, bukan tanggal. Misalnya, suatu saat seseorang mengubah kueri Anda menjadi berikut
AND datefield <= '2012-01-01'
... mengharapkan (dan gagal) untuk memasukkan "2012-01-01" sehari penuh dalam kueri. Dengan sintaks selanjutnya, maksud menjadi lebih jelas dan kebingungan ini dapat dicegah.
Untuk membuatnya lebih jelas (mungkin terlalu bertele-tele), Anda dapat melakukan pemeran eksplisit:
WHERE datefield >= '2010-01-01 00:00:00'::timestamp
AND datefield < '2012-01-01 00:00:00'::timestamp
Saya tidak akan menggunakan to_date()
di sini untuk alasan yang sama (potensi kebingungan tipe data), atau to_timestamp()
(ini mengembalikan timestamptz
).
BTW, saya telah memodifikasi kasus ini untuk mematuhi praktik yang disarankan (kata kunci dalam huruf besar, pengidentifikasi dalam huruf kecil)