sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur make_interval() fungerar i PostgreSQL

I PostgreSQL, make_interval() funktionen skapar ett intervall från år, månader, veckor, dagar, timmar, minuter och sekunder.

Du anger fälten år, månader, veckor, dagar, timmar, minuter och/eller sekunder, och det kommer att returnera ett intervall i intervallet datatyp.

Syntax

Funktionen har följande syntax:

make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days int DEFAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0)

Exempel

Här är ett exempel att visa.

SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultat:

1 year 2 mons 25 days 05:06:07

I det här exemplet gav jag alla sju argumenten.

Detta är den traditionella mekanismen för att skicka argument till funktioner i PostgreSQL, och den kallas "positionell notation".

När du använder positionsbeteckning specificeras alla argument i ordning.

Namnställd notation

Här är ett exempel med namngiven notation.

SELECT make_interval(days => 12);

Resultat:

12 days

I det här exemplet använder jag namngiven notation för att bara ange ett argument. Detta sparar mig från att behöva ange alla argument, bara för att ange antalet dagar.

Alla argument är som standard noll, så det finns ingen negativ inverkan genom att utelämna dem.

Här är vad som händer om jag inte använder namngiven notation när jag anger bara ett argument.

SELECT make_interval(12);

Resultat:

12 years

Det antog att jag menade 12 år.

Det som är bra med namngiven notation är att du kan ge så många argument som du behöver, och inte mer.

Till exempel:

SELECT make_interval(months => 10, days => 5, mins => 47);

Resultat:

10 mons 5 days 00:47:00

Äldre namnnotation

Äldre versioner av Postgres använde en något annorlunda syntax för namngiven notation. Denna syntax använder := istället för => .

Exempel:

SELECT make_interval(days := 12);

Resultat:

12 days

Från och med Postgres 12 fungerar denna syntax fortfarande för bakåtkompatibilitet.

Veckor och dagar

Med Postgres-intervall representeras veckor som dagar. Så om du anger weeks argument kommer resultatet att bli i dagar.

SELECT make_interval(weeks => 2);

Resultat:

14 days

Därför om du också anger days argument kommer det att läggas till de dagar som produceras av weeks argument.

SELECT make_interval(weeks => 2, days => 3);

Resultat:

17 days

Intervallutgångsstil

I Postgres kan utdataformatet för intervalltypen ställas in på en av följande fyra intervallstilar:

  • sql_standard
  • postgres
  • postgres_verbose
  • iso_8601

Du kan ställa in detta med SET intervalstyle . Standard är postgres format.

De tidigare exemplen använder alla standardformatet (postgres ).

Här är ett exempel som visar utdata från make_interval() när du använder olika utmatningsstilar.

sql_standard

SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultat:

+1-2 +25 +5:06:07

postgres

Detta är standardinställningen.

SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultat:

1 år 2 månader 25 dagar 05:06:07

postgres_verbose

SET intervalstyle = 'postgres_verbose';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultat:

@ 1 year 2 mons 25 days 5 hours 6 mins 7 secs

iso_8601

SET intervalstyle = 'iso_8601';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);

Resultat:

P1Y2M25DT5H6M7S

  1. Vad är strängsammansättningsoperatorn i Oracle?

  2. Uppdatera Salesforce-data med en SQL Server-markör

  3. Är det möjligt att göra en rekursiv SQL-fråga?

  4. Infoga alla värden i en tabell i en annan tabell i SQL