Saya mencoba untuk menanyakan postgresql db saya untuk mengembalikan hasil di mana tanggal dalam bulan dan tahun tertentu. Dengan kata lain, saya ingin semua nilai untuk satu bulan-tahun.
Satu-satunya cara saya bisa melakukannya sejauh ini adalah seperti ini:
SELECT user_id
FROM user_logs
WHERE login_date BETWEEN '2014-02-01' AND '2014-02-28'
Masalahnya adalah saya harus menghitung tanggal pertama dan tanggal terakhir sebelum menanyakan tabel. Apakah ada cara yang lebih sederhana untuk melakukan ini?
Terima kasih
sql
postgresql
date
between
John
sumber
sumber
Jawaban:
Dengan tanggal (dan waktu) banyak hal menjadi lebih sederhana jika Anda gunakan
>= start AND < end
.Sebagai contoh:
Dalam hal ini, Anda masih perlu menghitung tanggal mulai bulan yang Anda butuhkan, tetapi itu harus jelas dalam berbagai cara.
Tanggal akhir juga disederhanakan; cukup tambahkan tepat satu bulan. Jangan main-main dengan 28, 30, 31, dll.
Struktur ini juga memiliki keunggulan karena dapat mempertahankan penggunaan indeks.
Banyak orang mungkin menyarankan formulir seperti berikut ini, tetapi mereka tidak menggunakan indeks:
Ini melibatkan penghitungan kondisi untuk setiap baris dalam tabel (pemindaian) dan tidak menggunakan indeks untuk menemukan rentang baris yang akan cocok (pencarian rentang).
sumber
2014-12-01
&2015-01-01
. Yang kedua bisa diindeks juga, tapi itu tidak sepele, saya akui -EXTRACT()
sepertinya lebih cocok.Dari PostreSQL 9.2 Jenis Rentang didukung. Jadi Anda bisa menulis ini seperti:
ini harus lebih efisien daripada perbandingan string
sumber
Untuk berjaga-jaga jika seseorang mendarat di sini ... sejak 8.1 Anda dapat menggunakan:
Dari dokumen:
sumber
Antara kata kunci bekerja sangat baik untuk kencan. itu mengasumsikan waktu pada 00:00:00 (yaitu tengah malam) untuk tanggal.
sumber
Bacalah dokumentasinya.
http://www.postgresql.org/docs/9.1/static/functions-datetime.html
Saya menggunakan kueri seperti itu:
atau
Juanitos Ingenier.
sumber