Ich empfehle date_trunc()
stattdessen. Es schneidet date
ab / timestamp
auf die angegebene Einheit.
Aus zwei Gründen:
-
Sie möchten die Anzahl der Bestellungen im August eines bestimmten Jahres, z. B. 2012, nicht die Summe für August aller Jahre in der Tabelle.
date_trunc('month', orderdate)
tut genau das und verhindert, dass Sie versehentlich mehrere Jahre mischen. Sie erhalten mehrere Zeilen für mehrere Jahre. -
Sie können beide
ORDER BY
undGROUP BY
Mit diesem einen Ausdruck ist die Abfrage etwas schneller.
SELECT to_char(date_trunc('month', orderdate), 'Mon') AS "Month" -- repeat expr.
,count(*) AS "Quantity"
FROM orders
GROUP BY date_trunc('month', orderdate) -- 1 item covers it
ORDER BY date_trunc('month', orderdate);
db<>fiddle hier
Altes sqlfiddle
Für vollständige Monatsnamen, wie Ihr erstes Beispiel andeutet:
to_char(date_col, 'Month')
Für nicht-englische, lokalisierte Namen:
to_char(date_col, 'TMMonth')