PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Classificando meses enquanto estou convertendo-os em texto


Sugiro date_trunc() em vez de. Ele trunca date / timestamp para a unidade indicada.

Por dois motivos:

  1. Você deseja que o número de pedidos em agosto de um determinado ano, como 2012, não a soma de agosto de todos os anos na tabela. date_trunc('month', orderdate) faz exatamente isso e evita que você misture vários anos por acidente. Você obtém várias linhas por vários anos.

  2. Você pode ORDER BY e GROUP BY essa expressão, a consulta é um pouco mais rápida.
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 aqui
Antigo sqlfiddle

Para nomes de meses completos, como seu primeiro exemplo implica:
to_char(date_col, 'Month')

Para nomes localizados em outros idiomas:
to_char(date_col, 'TMMonth')

Detalhes no manual.