Come posso ottenere la data del lunedì di questa settimana in PostgreSQL?Ricevi la data del lunedì di questa settimana a Postgres?
Ad esempio, oggi è il 16/01/15 (venerdì). La data di lunedì di questa settimana è il 01/12/15.
Come posso ottenere la data del lunedì di questa settimana in PostgreSQL?Ricevi la data del lunedì di questa settimana a Postgres?
Ad esempio, oggi è il 16/01/15 (venerdì). La data di lunedì di questa settimana è il 01/12/15.
SELECT current_date + cast(abs(extract(dow from current_date) - 7) + 1 as int);
funziona, anche se potrebbero esserci modi più eleganti di farlo.
L'idea generale è di ottenere il giorno corrente della settimana, dow
, sottrarre 7 e prendere gli addominali, che ti daranno il numero di giorni fino alla fine della settimana, e aggiungere 1, per arrivare al lunedì . Questo ti dà il prossimo lunedì.
EDIT: dopo aver completamente frainteso la questione, per ottenere la prima Lunedi, è molto più semplice:
SELECT current_date - cast(extract(dow from current_date) as int) + 1;
cioè, sottrarre il giorno corrente della settimana dalla data odierna (il numero di percorso giornata di Lunedi) e aggiungi uno, per tornare al lunedì.
Di solito uso un calendar table. Ci sono due vantaggi principali.
Supponendo che "il lunedì di questa settimana" indichi il lunedì prima di oggi, a meno che oggi non sia lunedì. . .
select max(cal_date) as previous_monday
from calendar
where day_of_week = 'Mon'
and cal_date <= current_date;
È possibile utilizzare date_trunc()
per questo:
select date_trunc('week', current_date);
Maggiori dettagli nel manuale:
http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC
Se "oggi" è Lunedi tornerà data odierna.
Questo mi dà la prossima data del lunedì. Come posso ottenere l'ultima data del lunedì? – Dezzie