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

So erhalten Sie den Tag des Jahres aus einem Datum in PostgreSQL

Problem:

Sie möchten den Tag des Jahres aus einer Datums- oder Zeitstempelspalte in PostgreSQL abrufen.

Beispiel:

Unsere Datenbank hat eine Tabelle namens software_sale mit Daten in den Spalten id , software und sale_date .

id Software Verkaufsdatum
1 Superspiel X 2019-09-15
2 Browser X 2019-10-15
3 DB-Neuigkeiten 2019-11-26
4 MyPaintSoft 2018-10-15
5 Neues Betriebssystem 2019-10-15

Zählen wir die Anzahl der verkauften Softwareartikel nach Tagen im Jahr. Wir werden dies verwenden, um herauszufinden, an welchen Tagen des Jahres (unabhängig vom tatsächlichen Jahr) die Verkäufe hoch oder niedrig waren.

Lösung 1:

Wir verwenden den DATE_PART() Funktion. Hier ist die Abfrage, die Sie schreiben würden:

SELECT DATE_PART('doy',sale_date) 
         AS  day_of_year,
       COUNT(id) as count
FROM software_sale
GROUP BY day_of_year;

Hier ist das Ergebnis der Abfrage:

day_of_year zählen
258 1
288 3
330 1

Diskussion:

Verwenden Sie das PostgreSQL DATE_PART() Funktion zum Abrufen der Tageszahl eines Jahres aus einer Datum/Uhrzeit/DatumUhrzeit/Zeitstempel-Spalte. Diese Funktion benötigt zwei Argumente. Das erste Argument ist der Datumsteil (oder Zeitteil), den die Funktion zurückgeben soll. In diesem Beispiel verwenden wir „doy“. “, was den Tag des Jahres zurückgibt. Sie können andere Teile wie Tag, Jahr, Monat, Stunde, Minute, Woche usw. verwenden. Sie können mehr in der PostgreSQL-Dokumentation erfahren.

Das zweite Argument ist das Datum/Uhrzeit/DatumUhrzeit/Zeitstempel, aus dem Sie den Datums-/Uhrzeitteil extrahieren möchten. Dies kann ein Ausdruck sein, der einen Datum/Uhrzeit/DatumUhrzeit/Zeitstempel-Wert oder den Namen einer Datum/Uhrzeit-/DatumUhrzeit-/Zeitstempel-Spalte zurückgibt. (In unserem Beispiel ist es eine Spalte des Datums Datentyp.)

Die Funktion DATE_PART() mit dem ‘doy ’ Bezeichner gibt die Nummer des Tages des Jahres (von 1 bis 365/366) als ganze Zahl zurück. In unserem Beispiel der Tag des Jahres des Verkaufsdatums (aus dem sale_date Spalte) wird jetzt in einer neuen Spalte day_of_year angezeigt . Der 15. Oktober war 2019 und 2018 der 288. Tag; An diesem Tag wurden in zwei Jahren insgesamt drei Verkäufe getätigt (2 im Jahr 2019, 1 im Jahr 2018).

Wir verwenden den COUNT() Aggregatfunktion zum Zählen der Anzahl der Verkäufe. Diese Funktion benötigt ein Argument; in diesem Fall ist es die Software-ID-Nummer. Wir brauchen auch den GROUP BY -Klausel in dieser Abfrage, um Datensätze nach dem Tag des Jahres zu gruppieren. (In unserem Beispiel ist das eigentliche Argument day_of_year , der Alias ​​für DATE_PART('doy',sale_date) .)

Dies ist nicht die einzige Möglichkeit, den Tag des Jahres zu erhalten. Wir können auch EXTRACT() verwenden Funktion.

Lösung 2:

Hier ist die Abfrage, die Sie mit EXTRACT() schreiben würden Funktion:

SELECT EXTRACT('doy' FROM sale_date) 
         AS  day_of_year,
       COUNT(id) as count
FROM software_sale
GROUP BY day_of_year;

Diese Funktion ähnelt DATE_PART() . Der Unterschied besteht darin, dass wir FROM anstelle eines Kommas zwischen der Datumsteilkennung und dem Datums- und Zeitargument verwenden. Das Ergebnis ist das gleiche. Hinweis:EXTRACT() ist SQL-Standard.