sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man får årets dag från ett datum i PostgreSQL

Problem:

Du vill få årets dag från ett datum eller en tidsstämpelkolumn i PostgreSQL.

Exempel:

Vår databas har en tabell som heter software_sale med data i kolumnerna id , software och sale_date .

id programvara sale_date
1 Super Game X 2019-09-15
2 Webbläsare X 2019-10-15
3 DB-nyheter 2019-11-26
4 MyPaintSoft 2018-10-15
5 Nytt OS 2019-10-15

Låt oss räkna antalet sålda programvaror per dagar på året. Vi kommer att använda detta för att ta reda på vilka dagar på året (oberoende av det faktiska året) försäljningen var hög eller låg.

Lösning 1:

Vi använder DATE_PART() fungera. Här är frågan du skulle skriva:

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

Här är resultatet av frågan:

day_of_year räkna
258 1
288 3
330 1

Diskussion:

Använd PostgreSQL DATE_PART() funktion för att hämta numret på dagen på ett år från kolumnen datum/tid/datumtid/tidsstämpel. Denna funktion tar två argument. Det första argumentet är datumdelen (eller tidsdelen) som du vill att funktionen ska returnera. I det här exemplet använder vi "doy ’, som returnerar dagen på året. Du kan använda andra delar, som dag, år, månad, timme, minut, vecka, etc. Du kan lära dig mer i PostgreSQL-dokumentationen.

Det andra argumentet är datum/tid/datumtid/tidsstämpel som du vill extrahera datum/tidsdelen från. Detta kan vara ett uttryck som returnerar ett datum/tid/datumtid/tidsstämpelvärde eller namnet på en kolumn datum/tid/datumtid/tidsstämpel. (I vårt exempel är det en kolumn med datum datatyp.)

Funktionen DATE_PART() med 'doy ’ identifierare returnerar numret på dagen på året (från 1 till 365/366) som ett heltal. I vårt exempel, dagen på året för försäljningsdatumet (från sale_date kolumn) visas nu i en ny kolumn, day_of_year . Den 15 oktober var den 288:e dagen 2019 och 2018; den dagen under två år gjordes totalt tre försäljningar (2 år 2019, 1 år 2018).

Vi använder COUNT() aggregatfunktion för att räkna antalet försäljningar. Denna funktion tar ett argument; i det här fallet är det programvarans ID-nummer. Vi behöver också GROUP BY klausul i denna fråga för att gruppera poster enligt dagen på året. (I vårt exempel är det faktiska argumentet day_of_year , aliaset för DATE_PART('doy',sale_date) .)

Detta är inte det enda sättet att få årets dag. Vi kan också använda EXTRACT() funktion.

Lösning 2:

Här är frågan du skulle skriva med EXTRACT() funktion:

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

Denna funktion liknar DATE_PART() . Skillnaden är att vi använder FROM istället för ett kommatecken mellan datumdelidentifieraren och datum- och tidsargumentet. Resultatet är detsamma. Obs:EXTRACT() är SQL-standard.


  1. PostgreSQL - GROUP BY-klausul

  2. Vad är skillnaden mellan MS Access och SQL?

  3. Hur LEAST() fungerar i MariaDB

  4. SQLite VISA TABELLER Motsvarande