Jak mogę uzyskać datę tego poniedziałku w PostgreSQL?Czy otrzymasz w tym tygodniu datę w Postgres?
Na przykład dzisiaj jest 01/16/15 (piątek). Data poniedziałku w tym tygodniu to 01.12.2015.
Jak mogę uzyskać datę tego poniedziałku w PostgreSQL?Czy otrzymasz w tym tygodniu datę w Postgres?
Na przykład dzisiaj jest 01/16/15 (piątek). Data poniedziałku w tym tygodniu to 01.12.2015.
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.
Zwykle używam calendar table. Istnieją dwie główne zalety.
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;
Można użyć do tego date_trunc()
:
select date_trunc('week', current_date);
Więcej szczegółów w instrukcji:
http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC
Jeśli "dzisiaj" jest poniedziałek zwróci dzisiejszą datę.
To daje mi nadchodzącą datę w poniedziałek. Jak mogę uzyskać ostatnią datę poniedziałku? – Dezzie