PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Sortowanie miesięcy podczas konwertowania ich na tekst

Proponuję date_trunc() zamiast. Obcina date / timestamp do danej jednostki.

Z dwóch powodów:

  1. Chcesz liczbę zamówień w sierpniu danego roku, np. 2012, nie suma za sierpień wszystkich lat w tabeli. date_trunc('month', orderdate) robi dokładnie to i zapobiega przypadkowemu mieszaniu się przez wiele lat. Otrzymasz wiele wierszy przez wiele lat.

  2. Możesz zarówno ORDER BY i GROUP BY to jedno wyrażenie, zapytanie jest nieco szybsze.

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 tutaj
Stary sqlfiddle

W przypadku pełnych nazw miesięcy, jak sugeruje pierwszy przykład:

to_char(date_col, 'Month')

W przypadku zlokalizowanych nazw innych niż angielskie:

to_char(date_col, 'TMMonth')

Szczegóły w instrukcji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Żółw ORM dla Pythona nie zwraca relacji encji (Pyndantic, FastAPI)

  2. Dlaczego ten regex nie działa w postgreSQL?

  3. Razem... z niespodzianką

  4. Rola Postgresql Docker nie istnieje

  5. Udostępnij połączenie do postgres db między procesami w Pythonie