I PostgreSQL er make_interval()
funktion opretter et interval fra felterne år, måneder, uger, dage, timer, minutter og sekunder.
Du angiver år, måneder, uger, dage, timer, minutter og/eller sekunder, og det vil returnere et interval i intervallet datatype.
Syntaks
Funktionen har følgende syntaks:
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)
Eksempel
Her er et eksempel til at demonstrere.
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Resultat:
1 year 2 mons 25 days 05:06:07
I dette eksempel gav jeg alle syv argumenter.
Dette er den traditionelle mekanisme til at sende argumenter til funktioner i PostgreSQL, og det omtales som "positionel notation".
Ved brug af positionsnotation er alle argumenter angivet i rækkefølge.
Navnet notation
Her er et eksempel, der bruger navngivet notation.
SELECT make_interval(days => 12);
Resultat:
12 days
I dette eksempel bruger jeg navngivet notation for kun at angive ét argument. Dette sparer mig for at skulle indtaste alle argumenter, bare for at angive antallet af dage.
Alle argumenter er som standard nul, så der er ingen negativ indvirkning ved at udelade dem.
Her er, hvad der sker, hvis jeg ikke bruger navngivet notation, når jeg kun angiver ét argument.
SELECT make_interval(12);
Resultat:
12 years
Det antog, at jeg mente 12 år.
Det gode ved navngivne notation er, at du kan give så mange argumenter, som du har brug for, og ikke mere.
For eksempel:
SELECT make_interval(months => 10, days => 5, mins => 47);
Resultat:
10 mons 5 days 00:47:00
Ældre navngivne notation
Ældre versioner af Postgres brugte en lidt anden syntaks til navngivne notation. Denne syntaks bruger :=
i stedet for =>
.
Eksempel:
SELECT make_interval(days := 12);
Resultat:
12 days
Fra Postgres 12 fungerer denne syntaks stadig for bagudkompatibilitet.
Uger og dage
Med Postgres-intervaller er uger repræsenteret som dage. Så hvis du angiver weeks
argument, vil resultatet være i dage.
SELECT make_interval(weeks => 2);
Resultat:
14 days
Derfor hvis du også angiver days
argument, vil det blive tilføjet til de dage produceret af weeks
argument.
SELECT make_interval(weeks => 2, days => 3);
Resultat:
17 days
Intervaloutputstil
I Postgres kan outputformatet for intervaltypen indstilles til en af følgende fire intervalstile:
sql_standard
postgres
postgres_verbose
iso_8601
Du kan indstille dette ved at bruge SET intervalstyle
. Standarden er postgres
format.
De foregående eksempler bruger alle standardformatet (postgres
).
Her er et eksempel, der viser outputtet af make_interval()
når du bruger forskellige output-stile.
sql_standard
SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Resultat:
+1-2 +25 +5:06:07
postgres
Dette er standardindstillingen.
SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Resultat:
1 år 2 måneder 25 dage 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