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