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