PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ordinare i mesi mentre li converto in testo

Suggerisco date_trunc() invece. Tronca date / timestamp all'unità data.

Per due motivi:

  1. Vuoi il numero di ordini nell'agosto di un anno particolare, come il 2012, non la somma di agosto di tutti gli anni in tabella. date_trunc('month', orderdate) fa esattamente questo e impedisce che tu mescoli più anni per caso. Ottieni più righe per più anni.

  2. Puoi entrambi ORDER BY e GROUP BY questa espressione, la query è un po' più veloce.

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<>violino qui
Vecchio sqlfiddle

Per i nomi di mesi interi, come suggerisce il tuo primo esempio:

to_char(date_col, 'Month')

Per nomi localizzati non inglesi:

to_char(date_col, 'TMMonth')

Dettagli nel manuale.