PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL- Filter rentang tanggal

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)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perlu mengubah penggabungan Oracle menjadi kueri ke PostgreSQL

  2. String Koneksi PostgreSQL Bersih

  3. Menghapus baris di datastore berdasarkan rentang waktu

  4. Kueri UNION ALL dinamis di Postgres

  5. Fungsi PostgreSQl mengembalikan beberapa set hasil dinamis