Vous pouvez utiliser date_trunc('week', ...)
.
Par exemple :
SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00
Ensuite, vous pouvez convertir cela en une date, si vous n'êtes pas intéressé par une heure de début.
Pour obtenir également la date de fin :
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
(J'ai utilisé le formatage par défaut ici, vous pouvez bien sûr l'adapter pour utiliser MM/DD/YYYY.)
Notez que, si vous voulez faire des comparaisons sur les horodatages, au lieu d'utiliser (date_trunc('week', ...) + '6 days'::interval
, vous pouvez ajouter une semaine entière et utiliser une comparaison stricte pour la fin de la semaine.
Cela exclura y
horodatages le dernier jour de la semaine (puisque l'heure limite est minuit le jour).
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date
Cela les inclura :
date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)
(C'est dans les rares cas où vous ne pouvez pas utiliser date_trunc
le y
directement.)
Si votre semaine commence un dimanche, remplacez date_trunc('week', x)::date
avec date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval
devrait fonctionner.