Jag föreslår date_trunc()
istället. Den trunkerar date
/ timestamp
till den givna enheten.
Av två skäl:
-
Du vill ha antalet beställningar i augusti ett visst år, som 2012, inte summan för augusti av alla år i tabellen.
date_trunc('month', orderdate)
gör precis det och förhindrar att du blandar flera år av misstag. Du får flera rader för flera år. -
Du kan både
ORDER BY
ochGROUP BY
detta ena uttryck, frågan är lite snabbare.
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);
För hela månadsnamn, som ditt första exempel antyder:
to_char(date_col, 'Month')
För icke-engelska, lokaliserade namn:
to_char(date_col, 'TMMonth')