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

Sortiere Monate, während ich sie in Text umwandle

Ich empfehle date_trunc() stattdessen. Es schneidet date ab / timestamp auf die angegebene Einheit.

Aus zwei Gründen:

  1. 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.

  2. Sie können beide ORDER BY und GROUP 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')

Details im Handbuch.