sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan får du årets dag fra en dato i PostgreSQL

Problem:

Du ønsker at få årets dag fra en dato eller en tidsstempelkolonne i PostgreSQL.

Eksempel:

Vores database har en tabel med navnet software_sale med data i kolonnerne id , software og sale_date .

id software udsalgsdato
1 Super Game X 2019-09-15
2 Browser X 2019-10-15
3 DB Nyheder 2019-11-26
4 MyPaintSoft 2018-10-15
5 Nyt OS 2019-10-15

Lad os tælle antallet af solgte softwareartikler efter dage i året. Vi bruger dette til at finde ud af, hvilke dage på året (uafhængig af det faktiske år) salget var højt eller lavt.

Løsning 1:

Vi bruger DATE_PART() fungere. Her er den forespørgsel, du ville skrive:

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

Her er resultatet af forespørgslen:

day_of_year tæller
258 1
288 3
330 1

Diskussion:

Brug PostgreSQL DATE_PART() funktion til at hente nummeret på dagen i et år fra en dato/tid/datotid/tidsstempelkolonne. Denne funktion tager to argumenter. Det første argument er den datodel (eller tidsdel), du ønsker, at funktionen skal returnere. I dette eksempel bruger vi 'doy ’, som returnerer årets dag. Du kan bruge andre dele, såsom dag, år, måned, time, minut, uge ​​osv. Du kan lære mere i PostgreSQL-dokumentationen.

Det andet argument er datoen/klokkeslættet/dato/tidsstemplet du vil udtrække dato/tidsdelen fra. Dette kan være et udtryk, der returnerer en dato/tid/datotid/tidsstempelværdi eller navnet på en dato/klokkeslæt/datotid/tidsstempel. (I vores eksempel er det en kolonne med datoen datatype.)

Funktionen DATE_PART() med 'doy ’ identifikator returnerer nummeret på dagen i året (fra 1 til 365/366) som et heltal. I vores eksempel, dagen på året for salgsdatoen (fra sale_date kolonne) vises nu i en ny kolonne, day_of_year . Den 15. oktober var den 288. dag i 2019 og i 2018; den dag over to år blev der i alt gennemført tre salg (2 i 2019, 1 i 2018).

Vi bruger COUNT() aggregeringsfunktion til at tælle antallet af salg. Denne funktion tager et argument; i dette tilfælde er det software-id-nummeret. Vi har også brug for GROUP BY klausul i denne forespørgsel til at gruppere poster i henhold til dagen på året. (I vores eksempel er det faktiske argument day_of_year , alias for DATE_PART('doy',sale_date) .)

Dette er ikke den eneste måde at få årets dag på. Vi kan også bruge EXTRACT() funktion.

Løsning 2:

Her er den forespørgsel, du ville skrive 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;

Denne funktion ligner DATE_PART() . Forskellen er, at vi bruger FROM i stedet for et komma mellem datodel-id'et og dato- og tidsargumentet. Resultatet er det samme. Bemærk:EXTRACT() er SQL-standard.


  1. JSON_QUERY() Funktion i Oracle

  2. Java JDBC Adgang nægtet for brugeren

  3. MySQL SOUNDEX() Eksempler

  4. Eliminering af duplikering af Where-udtryk i applikationen