Problem:
Du ønsker at få ugenummeret på en dato eller tidsstempelværdi i en PostgreSQL-database.
Eksempel:
Vores database har en tabel med navnet children
med data i kolonnerne id
, first_name
, last_name
og birth_date
.
id | fornavn | efternavn | fødselsdato |
---|---|---|---|
1 | Angela | Michelin | 2018-01-01 |
2 | Martin | Jackson | 2002-07-26 |
3 | Justin | Clark | 2010-12-26 |
4 | Frank | Barker | 2008-06-08 |
Lad os for hvert barn få deres fornavn, efternavn og ugenummeret på deres fødselsdato.
Løsning 1:
Vi bruger DATE_PART()
fungere. Her er den forespørgsel, du ville skrive:
SELECT first_name, last_name, DATE_PART('week',birth_date) AS birth_week_number FROM children;
Her er resultatet af forespørgslen:
fornavn | efternavn | fødselsugenummer |
---|---|---|
Angela | Michelin | 1 |
Martin | Jackson | 30 |
Justin | Clark | 51 |
Frank | Barker | 23 |
Diskussion:
Brug DATE_PART()
funktion til at hente ugenummeret fra en dato i en PostgreSQL-database. Denne funktion tager to argumenter. Det første argument er datodelen, der skal hentes; vi bruger 'uge', som returnerer ugenummeret (f.eks. "1" for den første uge i januar, årets første uge). Du kan bruge en anden datodel, såsom dag, år, måned, time, minut, doy (dagens nummer i året) osv. Du kan lære mere om datodele i PostgreSQL-dokumentationen.
Det andet argument er et kolonnenavn af datatypen date/timestamp/timestamptz eller et udtryk, der returnerer en af disse typer. (I vores eksempel er det en kolonne med datoen datatype.)
Når den bruges sammen med "uge"-datodelen, funktionen DATE_PART()
returnerer ugenummeret som et heltal. I vores eksempel vises ugenummeret for det givne barns fødselsdato; vi navngav denne kolonne birth_week_number
. Martin Jackson blev født 2002-07-26
, så funktionen returnerer '30' som ugenummeret på hans fødselsdato.
DATE_PART()
er ikke kun én måde at få ugenummeret på. En anden mulighed er at bruge EXTRACT()
funktion.
Løsning 2:
Vi bruger EXTRACT()
fungere. Her er den forespørgsel, du ville skrive:
SELECT first_name, last_name, EXTRACT('week' FROM birth_date) AS birth_week_number FROM children;
Denne funktion ligner DATE_PART()
. Forskellen ligger i syntaksen:i stedet for et komma mellem datodelens navn og kolonnen/udtrykket er der nøgleordet FROM. Også EXTRACT()
Funktionen er SQL-standard. Resultatet er det samme for begge funktioner.