Problem:
Du vill få veckonummer för ett datum eller tidsstämpelvärde i en PostgreSQL-databas.
Exempel:
Vår databas har en tabell som heter children
med data i kolumnerna id
, first_name
, last_name
och birth_date
.
id | förnamn | efternamn | födelsedatum |
---|---|---|---|
1 | Angela | Michelin | 2018-01-01 |
2 | Martin | Jackson | 2002-07-26 |
3 | Justin | Clark | 2010-12-26 |
4 | Frank | Barker | 2008-06-08 |
För varje barn, låt oss få deras förnamn, efternamn och veckonummer för deras födelsedatum.
Lösning 1:
Vi använder DATE_PART()
fungera. Här är frågan du skulle skriva:
SELECT first_name, last_name, DATE_PART('week',birth_date) AS birth_week_number FROM children;
Här är resultatet av frågan:
förnamn | efternamn | födelse_veckonummer |
---|---|---|
Angela | Michelin | 1 |
Martin | Jackson | 30 |
Justin | Clark | 51 |
Frank | Barker | 23 |
Diskussion:
Använd DATE_PART()
funktion för att hämta veckonummer från ett datum i en PostgreSQL-databas. Denna funktion tar två argument. Det första argumentet är datumdelen som ska hämtas; vi använder "vecka", som returnerar veckonummer (t.ex. "1" för den första veckan i januari, den första veckan på året). Du kan använda en annan datumdel, som dag, år, månad, timme, minut, doy (dagens nummer i året), etc. Du kan lära dig mer om datumdelar i PostgreSQL-dokumentationen.
Det andra argumentet är ett kolumnnamn av datatypen date/timestamp/timestamptz eller ett uttryck som returnerar en av dessa typer. (I vårt exempel är det en kolumn med datum datatyp.)
När den används med datumdelen "vecka", funktionen DATE_PART()
returnerar veckonummer som ett heltal. I vårt exempel visas veckonumret för det givna barnets födelsedatum; vi döpte den här kolumnen till birth_week_number
. Martin Jackson föddes 2002-07-26
, så funktionen returnerar "30" som veckonummer för hans födelsedatum.
DATE_PART()
är inte bara ett sätt att få veckonummer. Ett annat alternativ är att använda EXTRACT()
funktion.
Lösning 2:
Vi använder EXTRACT()
fungera. Här är frågan du skulle skriva:
SELECT first_name, last_name, EXTRACT('week' FROM birth_date) AS birth_week_number FROM children;
Denna funktion liknar DATE_PART()
. Skillnaden ligger i syntaxen:istället för ett kommatecken mellan datumdelens namn och kolumnen/uttrycket finns nyckelordet FROM. Även EXTRACT()
Funktionen är SQL-standard. Resultatet är detsamma för båda funktionerna.