2015-01-16 13 views

Odpowiedz

9
SELECT current_date + cast(abs(extract(dow from current_date) - 7) + 1 as int); 

działa, chociaż mogą istnieć bardziej eleganckie sposoby robienia tego.

Generalnie chodzi o to, aby uzyskać bieżący dzień tygodnia, dow, odjąć 7 i wziąć abs, który da ci liczbę dni do końca tygodnia, i dodać 1, aby dostać się do poniedziałku . To daje następny poniedziałek.

EDIT: po całkowicie błędne odczytanie pytanie, aby uzyskać przed poniedziałek, jest znacznie prostsza:

SELECT current_date - cast(extract(dow from current_date) as int) + 1; 

czyli odjąć bieżący dzień tygodnia od dnia dzisiejszego (liczba dniu ścieżce poniedziałek) i dodaj jedną, aby wrócić do poniedziałku.

+0

To daje mi nadchodzącą datę w poniedziałek. Jak mogę uzyskać ostatnią datę poniedziałku? – Dezzie

3

Zwykle używam calendar table. Istnieją dwie główne zalety.

  • Prosty. Młodsi deweloperzy mogą poprawnie wykonać zapytanie przy niewielkim przeszkoleniu.
  • Oczywiste. Prawidłowe zapytania to: , oczywiście prawidłowe.

Przyjmując, że "poniedziałkowy tydzień" oznacza poniedziałek przed dniem dzisiejszym, chyba że dzisiaj jest poniedziałek. . .

select max(cal_date) as previous_monday 
from calendar 
where day_of_week = 'Mon' 
    and cal_date <= current_date; 
Powiązane problemy