sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man extraherar veckonummer från ett datum i PostgreSQL

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.


  1. Felsökning av SQL Server Transactional Replikeringsproblem

  2. Hur får man information om en användardefinierad typ?

  3. IN-sats med NULL eller IS NULL

  4. Hur man konfigurerar PostgreSQL för att acceptera alla inkommande anslutningar