PostgreSQL bietet uns mehrere Möglichkeiten, Tag, Monat und Jahr aus einem Datum zu ermitteln.
Drei Funktionen, die einem sofort in den Sinn kommen, sind:DATE_PART()
, EXTRACT()
, und TO_CHAR()
.
EXTRACT()
Der EXTRACT()
Die Funktion ruft Unterfelder wie Jahr, Monat, Stunde oder Minute ab, die Teil eines Datums-/Uhrzeitwerts sind.
Beispiel:
SELECT EXTRACT(YEAR FROM date '2035-10-30');
Ergebnis:
2035
Wir können verschiedene Datumsteile in separaten Feldern zurückgeben, indem wir diese Funktion drei Mal aufrufen:
SELECT
EXTRACT(DAY FROM date '2035-10-30') AS "Day",
EXTRACT(DOW FROM date '2035-10-30') AS "DOW",
EXTRACT(DOY FROM date '2035-10-30') AS "DOY",
EXTRACT(MONTH FROM date '2035-10-30') AS "Month",
EXTRACT(YEAR FROM date '2035-10-30') AS "Year";
Ergebnis:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Hier habe ich den Tag des Monats, den Tag der Woche, den Tag des Jahres, den Monat und das Jahr aus dem Datum zurückgegeben.
Weitere Beispiele und eine Liste von Feldnamen, die von dieser Funktion zurückgegeben werden können, finden Sie unter Funktionsweise von Extract() in PostgreSQL.
DATE_PART()
Der DATE_PART()
Funktion ist das Äquivalent von EXTRACT()
, aber mit einer etwas anderen Syntax.
SELECT
DATE_PART('DAY', date '2035-10-30') AS "Day",
DATE_PART('DOW', date '2035-10-30') AS "DOW",
DATE_PART('DOY', date '2035-10-30') AS "DOY",
DATE_PART('MONTH', date '2035-10-30') AS "Month",
DATE_PART('YEAR', date '2035-10-30') AS "Year";
Ergebnis:
Day | DOW | DOY | Month | Year -----+-----+-----+-------+------ 30 | 2 | 303 | 10 | 2035
Diese Funktion erfordert, dass das erste Argument als Zeichenfolge bereitgestellt wird und ein Komma die beiden Argumente anstelle von FROM
trennt Schlüsselwort.
TO_CHAR()
Der TO_CHAR()
Die Funktion ist flexibler, da sie verwendet werden kann, um eine größere Vielfalt von Ausgaben bereitzustellen. Beispielsweise können wir diese Funktion verwenden, um Tag, Monat und Jahr in einem Feld zurückzugeben:
SELECT TO_CHAR(date '2045-12-02', 'Day, DDth Month YYYY');
Ergebnis:
Saturday , 02nd December 2045
Wir können den fm
verwenden Template-Modifizierer, um eventuell angewendete Paddings zu unterdrücken:
SELECT TO_CHAR(date '2165-04-01', 'fmDay, fmDDth fmMonth YYYY');
Ergebnis:
Monday, 1st April 2165
Beachten Sie auch, dass der th
Template-Modifizierer ist schlau genug, um zu wissen, ob st
, nd
, rd
, oder th
sollte angehängt werden.
Hier ist ein Beispiel, das verschiedene Aufrufe von TO_CHAR()
verwendet um verschiedene Datumsteile in separaten Feldern auszugeben:
SELECT
TO_CHAR(date '2165-04-01', 'fmDay') AS "Day",
TO_CHAR(date '2165-04-01', 'fmDD') AS "DD",
TO_CHAR(date '2165-04-01', 'fmMonth') AS "Month",
TO_CHAR(date '2165-04-01', 'YYYY') AS "YYYY";
Ergebnis:
Day | DD | Month | YYYY --------+----+-------+------ Monday | 1 | April | 2165