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.