sql >> Database >  >> RDS >> PostgreSQL

Hoe het weeknummer van een datum te extraheren in PostgreSQL

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.


  1. Hoe krijg ik de namen van alle kolommen voor alle tabellen in MySQL?

  2. Mijnbouwplannen:niet alleen voor de plancache

  3. Databases en tabellen weergeven in PostgreSQL

  4. Kan offset-naïeve en offset-bewuste datetimes niet aftrekken