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.