PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come ottenere la stringa della data di inizio e fine della settimana in PostgreSQL?

Puoi utilizzare date_trunc('week', ...) .

Ad esempio:

SELECT date_trunc('week', '2012-07-25 22:24:22'::timestamp);
-> 2012-07-23 00:00:00

Quindi, puoi convertirlo in una data, se non sei interessato a un'ora di inizio.

Per avere anche la data di fine:

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

(Ho usato la formattazione predefinita qui, ovviamente puoi adattarla per usare MM/GG/AAAA.)

Nota che, se vuoi fare confronti sui timestamp, invece di usare (date_trunc('week', ...) + '6 days'::interval , potresti voler aggiungere un'intera settimana e utilizzare un confronto rigoroso per la fine della settimana.

Questo escluderà y timestamp dell'ultimo giorno della settimana (poiché l'orario limite è la mezzanotte del giorno).

    date_trunc('week', x)::date <= y::timestamp
AND y::timestamp <= (date_trunc('week', x) + '6 days'::interval)::date

Questo li includerà:

    date_trunc('week', x)::date <= y::timestamp
AND y::timestamp < (date_trunc('week', x) + '1 week'::interval)

(Questo è nei rari casi in cui non puoi usare date_trunc su y direttamente.)

Se la tua settimana inizia di domenica, sostituisci date_trunc('week', x)::date con date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval dovrebbe funzionare.