PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment obtenir une chaîne de date de début et de fin de semaine dans PostgreSQL ?

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.