Możesz użyć date_trunc('week', ...)
.
Na przykład:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Następnie możesz przekonwertować to na datę, jeśli nie interesuje Cię godzina rozpoczęcia.
Aby uzyskać również datę zakończenia:
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
(Użyłem tutaj domyślnego formatowania, możesz oczywiście dostosować to, aby używało MM/DD/RRRR.)
Zauważ, że jeśli chcesz dokonywać porównań na znacznikach czasu, zamiast używać (date_trunc('week', ...) + '6 days'::interval
, możesz dodać cały tydzień i użyć ścisłego porównania na koniec tygodnia.
To wykluczy y
znaczniki czasu ostatniego dnia tygodnia (ponieważ godzina graniczna to północ dnia).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Obejmuje to ich:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(Dzieje się tak w rzadkich przypadkach, gdy nie możesz użyć date_trunc
na y
bezpośrednio.)
Jeśli tydzień zaczyna się w niedzielę, zastąp date_trunc('week', x)::date
z date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
powinien działać.