PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie erhalte ich in PostgreSQL eine Wochenstart- und Enddatumszeichenfolge?

Sie können date_trunc('week', ...) .

Zum Beispiel:

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

Dann können Sie dies in ein Datum umwandeln, wenn Sie nicht an einer Startzeit interessiert sind.

So erhalten Sie auch das Enddatum:

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

(Ich habe hier die Standardformatierung verwendet, Sie können diese natürlich anpassen, um MM/TT/JJJJ zu verwenden.)

Beachten Sie, dass Sie, wenn Sie Zeitstempel vergleichen möchten, anstatt (date_trunc('week', ...) + '6 days'::interval zu verwenden , möchten Sie vielleicht eine ganze Woche hinzufügen und einen strengen Vergleich für das Ende der Woche verwenden.

Dadurch wird y ausgeschlossen Zeitstempel am letzten Tag der Woche (da die Annahmeschlusszeit Mitternacht des Tages ist).

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

Dies schließt sie ein:

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

(Das ist in den seltenen Fällen, in denen Sie date_trunc nicht verwenden können auf y direkt.)

Wenn Ihre Woche an einem Sonntag beginnt, ersetzen Sie date_trunc('week', x)::date mit date_trunc('week', x + '1 day'::interval)::date - '1 day'::interval sollte funktionieren.