sql >> Databasteknik >  >> RDS >> PostgreSQL

Sorterar månader medan jag konverterar dem till text

Jag föreslår date_trunc() istället. Den trunkerar date / timestamp till den givna enheten.

Av två skäl:

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

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

db<>fiol här
Gammal sqlfiddle

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')

Detaljer i manualen.



  1. Python kan inte hitta ODBC-drivrutinen på Heroku efter att ha ställt in allt

  2. Problem med att lagra data i databasen i php

  3. Java Crosstab - förberedd uttalandefråga

  4. PostgreSQL sök och ersätt where condition