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

Jak získat den v roce z data v PostgreSQL

Problém:

Chcete získat den v roce ze sloupce data nebo časového razítka v PostgreSQL.

Příklad:

Naše databáze obsahuje tabulku s názvem software_sale s údaji ve sloupcích id , software a sale_date .

id software sale_date
1 Super hra X 2019-09-15
2 Prohlížeč X 2019-10-15
3 Zprávy DB 26. 11. 2019
4 MyPaintSoft 2018-10-15
5 Nový operační systém 2019-10-15

Spočítejme si počet prodaných softwarových položek podle dnů v roce. Použijeme to ke zjištění, které dny v roce (nezávisle na skutečném roce) byly prodeje vysoké nebo nízké.

Řešení 1:

Použijeme DATE_PART() funkce. Zde je dotaz, který byste napsali:

SELECT DATE_PART('doy',sale_date) 
         AS  day_of_year,
       COUNT(id) as count
FROM software_sale
GROUP BY day_of_year;

Zde je výsledek dotazu:

day_of_year počet
258 1
288 3
330 1

Diskuse:

Použijte PostgreSQL DATE_PART() funkce pro načtení čísla dne v roce ze sloupce datum/čas/datum a čas/časové razítko. Tato funkce má dva argumenty. První argument je část data (nebo časová část), kterou má funkce vrátit. V tomto příkladu používáme „doy “, který vrací den v roce. Můžete použít další části, jako je den, rok, měsíc, hodina, minuta, týden atd. Více se můžete dozvědět v dokumentaci PostgreSQL.

Druhý argument je datum/čas/datumčas/časové razítko, ze kterého chcete část data/času extrahovat. Může to být výraz vracející hodnotu datum/čas/datum/čas/časové razítko nebo název sloupce datum/čas/datum a čas/časové razítko. (V našem příkladu se jedná o sloupec datum datový typ.)

Funkce DATE_PART() pomocí „doy ’ identifikátor vrací číslo dne v roce (od 1 do 365/366) jako celé číslo. V našem příkladu den v roce data prodeje (z sale_date sloupec) se nyní zobrazuje v novém sloupci day_of_year . 15. říjen byl 288. dnem v roce 2019 a v roce 2018; toho dne za dva roky byly uskutečněny celkem tři prodeje (2 v roce 2019, 1 v roce 2018).

Používáme COUNT() agregační funkce pro počítání počtu prodejů. Tato funkce má jeden argument; v tomto případě je to identifikační číslo softwaru. Potřebujeme také GROUP BY klauzule v tomto dotazu seskupit záznamy podle dne v roce. (V našem příkladu je skutečný argument day_of_year , alias pro DATE_PART('doy',sale_date) .)

Toto není jediný způsob, jak získat den v roce. Můžeme také použít EXTRACT() funkce.

Řešení 2:

Zde je dotaz, který byste napsali pomocí EXTRACT() funkce:

SELECT EXTRACT('doy' FROM sale_date) 
         AS  day_of_year,
       COUNT(id) as count
FROM software_sale
GROUP BY day_of_year;

Tato funkce je podobná funkci DATE_PART() . Rozdíl je v tom, že místo čárky mezi identifikátorem části data a argumentem data a času používáme FROM. Výsledek je stejný. Poznámka:EXTRACT() je standard SQL.


  1. SQL dotaz vrací data z více tabulek

  2. 6 způsobů, jak vybrat duplicitní řádky v SQLite

  3. Jak nakonfigurovat postgresql poprvé?

  4. Přidejte sloupec časového razítka s výchozím NOW() pouze pro nové řádky