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

Sorterer måneder, mens jeg konverterer dem til tekst

Jeg foreslår date_trunc() i stedet. Den afkorter date / timestamp til den givne enhed.

Af to grunde:

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

  2. Du kan både ORDER BY og GROUP 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')

Detaljer i manualen.



  1. Lagret procedure hænger tilsyneladende uden forklaring

  2. Postgres LIKE med kolonneværdi som understreng

  3. Hvorfor rlwrap ekkoer redundant, hvad jeg skriver fra tastaturet?

  4. Smertefuldt langsom Postgres-forespørgsel ved hjælp af WHERE på mange tilstødende rækker