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

Come funziona make_interval() in PostgreSQL

In PostgreSQL, il make_interval() la funzione crea un intervallo di campi di anni, mesi, settimane, giorni, ore, minuti e secondi.

Fornisci i campi anni, mesi, settimane, giorni, ore, minuti e/o secondi e restituirà un intervallo nell'intervallo tipo di dati.

Sintassi

La funzione ha la seguente sintassi:

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)

Esempio

Ecco un esempio da dimostrare.

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

Risultato:

1 year 2 mons 25 days 05:06:07

In questo esempio, ho fornito tutti e sette gli argomenti.

Questo è il meccanismo tradizionale per passare argomenti alle funzioni in PostgreSQL e viene chiamato "notazione posizionale".

Quando si utilizza la notazione posizionale, tutti gli argomenti vengono specificati in ordine.

Notazione denominata

Ecco un esempio che utilizza la notazione denominata.

SELECT make_interval(days => 12);

Risultato:

12 days

In questo esempio, utilizzo la notazione denominata per specificare un solo argomento. Questo mi evita di dover inserire tutti gli argomenti, solo per specificare il numero di giorni.

Tutti gli argomenti per impostazione predefinita sono zero, quindi non c'è alcun impatto negativo omettendoli.

Ecco cosa succede se non utilizzo la notazione denominata quando si specifica un solo argomento.

SELECT make_interval(12);

Risultato:

12 years

Dava per scontato che intendessi 12 anni.

La cosa buona della notazione con nome è che puoi fornire tutti gli argomenti di cui hai bisogno e non di più.

Ad esempio:

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

Risultato:

10 mons 5 days 00:47:00

Notazione con nome legacy

Le versioni precedenti di Postgres utilizzavano una sintassi leggermente diversa per la notazione denominata. Questa sintassi usa := invece di => .

Esempio:

SELECT make_interval(days := 12);

Risultato:

12 days

A partire da Postgres 12, questa sintassi funziona ancora per la compatibilità con le versioni precedenti.

Settimane e giorni

Con gli intervalli di Postgres, le settimane sono rappresentate come giorni. Quindi, se specifichi le weeks argomento, il risultato sarà in giorni.

SELECT make_interval(weeks => 2);

Risultato:

14 days

Quindi se specifichi anche i days argomento, verrà aggiunto ai giorni prodotti dalle weeks argomento.

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

Risultato:

17 days

Stile di output intervallo

In Postgres, il formato di output del tipo di intervallo può essere impostato su uno dei seguenti quattro stili di intervallo:

  • sql_standard
  • postgres
  • postgres_verbose
  • iso_8601

Puoi impostarlo usando SET intervalstyle . L'impostazione predefinita è postgres formato.

Gli esempi precedenti utilizzano tutti il ​​formato predefinito (postgres ).

Ecco un esempio che mostra l'output di make_interval() quando si utilizzano stili di output diversi.

sql_standard

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

Risultato:

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

postgres

Questa è l'impostazione predefinita.

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

Risultato:

1 anno 2 lun 25 giorni 05:06:07

postgres_verbose

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

Risultato:

@ 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);

Risultato:

P1Y2M25DT5H6M7S