Anda dapat menggunakan date_trunc('week', ...)
.
Misalnya:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Kemudian, Anda dapat mengubahnya menjadi tanggal, jika Anda tidak tertarik dengan waktu mulainya.
Untuk mendapatkan tanggal akhir juga:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp)::date
|| ' '
|| (date_trunc('week', '2012-07-25 22:24:22'::timestamp)+ '6 days'::interval)::date;
-> 2012-07-23 2012-07-29
(Saya telah menggunakan pemformatan default di sini, Anda tentu saja dapat menyesuaikan ini untuk menggunakan MM/DD/YYYY.)
Perhatikan bahwa, jika Anda ingin membuat perbandingan pada stempel waktu, daripada menggunakan (date_trunc('week', ...) + '6 days'::interval
, Anda mungkin ingin menambahkan satu minggu penuh dan menggunakan perbandingan ketat untuk akhir minggu.
Ini akan mengecualikan y
stempel waktu pada hari terakhir dalam seminggu (karena batas waktu adalah tengah malam pada hari itu).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Ini akan mencakup mereka:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(Itu dalam kasus yang jarang terjadi ketika Anda tidak dapat menggunakan date_trunc
pada y
langsung.)
Jika minggu Anda dimulai pada hari Minggu, ganti date_trunc('week', x)::date
dengan date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
harus bekerja.