2015-01-16 10 views

risposta

9
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ì.

+0

Questo mi dà la prossima data del lunedì. Come posso ottenere l'ultima data del lunedì? – Dezzie

3

Di solito uso un calendar table. Ci sono due vantaggi principali.

  • Semplice. Gli sviluppatori Junior possono interrogarlo correttamente con poco addestramento.
  • Ovvio. Le domande corrette sono ovviamente corrette.

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; 
Problemi correlati