sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan make_interval() virker i PostgreSQL

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

  1. Relink Grid Infrastructure

  2. Oracle JDBC:ugyldigt brugernavn/adgangskode (ora-01017)

  3. MySQL JOIN ON vs BRUG?

  4. Hvornår/hvorfor skal man bruge Cascading i SQL Server?