Můžete použít date_trunc('week', ...)
.
Například:
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Pak jej můžete převést na datum, pokud vás čas zahájení nezajímá.
Chcete-li získat také datum ukončení:
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
(Zde jsem použil výchozí formátování, můžete si ho samozřejmě přizpůsobit pro použití MM/DD/RRRR.)
Všimněte si, že pokud chcete provádět srovnání časových razítek, místo použití (date_trunc('week', ...) + '6 days'::interval
, možná budete chtít přidat celý týden a použít striktní srovnání pro konec týdne.
Tím se vyloučí y
časová razítka poslední den v týdnu (protože uzávěrka je půlnoc toho dne).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
To bude zahrnovat:
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(To je ve vzácných případech, kdy nemůžete použít date_trunc
na y
přímo.)
Pokud váš týden začíná v neděli, nahraďte date_trunc('week', x)::date
s date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
by mělo fungovat.