sql >> Databáze >  >> RDS >> PostgreSQL

Třídění měsíců při jejich převodu na text

Navrhuji date_trunc() namísto. Zkrátí date / timestamp k dané jednotce.

Ze dvou důvodů:

  1. Chcete počet objednávek v srpnu určitého roku, například 2012, ne součet za srpen všech let v tabulce. date_trunc('month', orderdate) dělá přesně to a zabraňuje náhodnému smíchání několika let. Získáte více řádků na několik let.

  2. Oba můžete ORDER BY a GROUP BY tento jeden výraz je dotaz o něco rychlejší.

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 zde
Starý sqlfiddle

U názvů celých měsíců, jako je váš první příklad:

to_char(date_col, 'Month')

Pro neanglické lokalizované názvy:

to_char(date_col, 'TMMonth')

Podrobnosti v příručce.



  1. Mysql - EXPLAIN SELECT z VIEW hledá ve všech řádcích hlavní tabulky

  2. Jak odstranit duplikáty ze seznamu odděleného mezerou pomocí Oracle regexp_replace?

  3. PHP zobrazované jméno přihlášeného uživatele

  4. jak spustit php skript z dávkového souboru