Jeg foreslår date_trunc()
i stedet. Den afkorter date
/ timestamp
til den givne enhed.
Af to grunde:
-
Du vil have antallet af ordrer i august i et bestemt år, f.eks. 2012, ikke summen for august af alle år i tabellen.
date_trunc('month', orderdate)
gør præcis det og forhindrer, at du blander flere år ved et uheld. Du får flere rækker i flere år. -
Du kan både
ORDER BY
ogGROUP BY
dette ene udtryk, forespørgslen er en smule hurtigere.
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 her
Gamle sqlfiddle
For hele månedsnavne, som dit første eksempel antyder:
to_char(date_col, 'Month')
For ikke-engelske, lokaliserede navne:
to_char(date_col, 'TMMonth')