Probleem:
U wilt het weeknummer van een datum- of tijdstempelwaarde in een PostgreSQL-database krijgen.
Voorbeeld:
Onze database heeft een tabel met de naam children met gegevens in de kolommen id , first_name , last_name , en birth_date .
| id | voornaam | achternaam | geboortedatum |
|---|---|---|---|
| 1 | Angela | Michelin | 01-01-2018 |
| 2 | Martin | Jackson | 26-07-2002 |
| 3 | Justin | Clark | 26-12-2010 |
| 4 | Frank | Barker | 2008-06-08 |
Laten we voor elk kind hun voornaam, achternaam en het weeknummer van hun geboortedatum krijgen.
Oplossing 1:
We gebruiken de DATE_PART() functie. Dit is de vraag die je zou schrijven:
SELECT first_name,
last_name,
DATE_PART('week',birth_date)
AS birth_week_number
FROM children;
Dit is het resultaat van de zoekopdracht:
| voornaam | achternaam | geboorteweek_nummer |
|---|---|---|
| Angela | Michelin | 1 |
| Martin | Jackson | 30 |
| Justin | Clark | 51 |
| Frank | Barker | 23 |
Discussie:
Gebruik de DATE_PART() functie om het weeknummer van een datum in een PostgreSQL-database op te halen. Deze functie heeft twee argumenten. Het eerste argument is het datumgedeelte dat moet worden opgehaald; we gebruiken 'week', die het weeknummer retourneert (bijvoorbeeld "1" voor de eerste week van januari, de eerste week van het jaar). U kunt een ander datumgedeelte gebruiken, zoals dag, jaar, maand, uur, minuut, doy (het getal van de dag in het jaar), enz. U kunt meer leren over datumgedeelten in de PostgreSQL-documentatie.
Het tweede argument is een kolomnaam van het datatype date/timestamp/timestamptz of een expressie die een van deze typen retourneert. (In ons voorbeeld is het een kolom van de datum gegevenstype.)
Bij gebruik met het datumgedeelte 'week', de functie DATE_PART() geeft het weeknummer terug als een geheel getal. In ons voorbeeld wordt het weeknummer voor de geboortedatum van het gegeven kind weergegeven; we noemden deze kolom birth_week_number . Martin Jackson werd geboren op 2002-07-26 , dus de functie retourneert '30' als het weeknummer van zijn geboortedatum.
DATE_PART() is niet slechts één manier om het weeknummer te krijgen. Een andere optie is om de EXTRACT() . te gebruiken functie.
Oplossing 2:
We gebruiken de EXTRACT() functie. Dit is de vraag die je zou schrijven:
SELECT first_name,
last_name,
EXTRACT('week' FROM birth_date)
AS birth_week_number
FROM children;
Deze functie is vergelijkbaar met DATE_PART() . Het verschil zit in de syntaxis:in plaats van een komma tussen de naam van het datumgedeelte en de kolom/uitdrukking, is er het sleutelwoord FROM. Ook de EXTRACT() functie is SQL-standaard. Het resultaat is hetzelfde voor beide functies.