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.