Dans PostgreSQL, le make_interval()
La fonction crée un intervalle à partir des champs années, mois, semaines, jours, heures, minutes et secondes.
Vous fournissez les champs années, mois, semaines, jours, heures, minutes et/ou secondes, et il renverra un intervalle dans l'intervalle type de données.
Syntaxe
La fonction a la syntaxe suivante :
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)
Exemple
Voici un exemple pour illustrer.
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Résultat :
1 year 2 mons 25 days 05:06:07
Dans cet exemple, j'ai fourni les sept arguments.
Il s'agit du mécanisme traditionnel de transmission d'arguments aux fonctions dans PostgreSQL, et il est appelé "notation positionnelle".
Lors de l'utilisation de la notation positionnelle, tous les arguments sont spécifiés dans l'ordre.
Notation nommée
Voici un exemple utilisant la notation nommée.
SELECT make_interval(days => 12);
Résultat :
12 days
Dans cet exemple, j'utilise la notation nommée afin de spécifier un seul argument. Cela m'évite d'avoir à entrer tous les arguments, juste pour spécifier le nombre de jours.
Tous les arguments sont par défaut à zéro, il n'y a donc aucun impact négatif en les omettant.
Voici ce qui se passe si je n'utilise pas la notation nommée lorsque je spécifie un seul argument.
SELECT make_interval(12);
Résultat :
12 years
Il supposait que je voulais dire 12 ans.
L'avantage de la notation nommée est que vous pouvez fournir autant d'arguments que nécessaire, et pas plus.
Par exemple :
SELECT make_interval(months => 10, days => 5, mins => 47);
Résultat :
10 mons 5 days 00:47:00
Notation nommée héritée
Les anciennes versions de Postgres utilisaient une syntaxe légèrement différente pour la notation nommée. Cette syntaxe utilise :=
au lieu de =>
.
Exemple :
SELECT make_interval(days := 12);
Résultat :
12 days
À partir de Postgres 12, cette syntaxe fonctionne toujours pour la rétrocompatibilité.
Semaines et jours
Avec les intervalles Postgres, les semaines sont représentées sous forme de jours. Donc, si vous spécifiez les weeks
argument, le résultat sera en jours.
SELECT make_interval(weeks => 2);
Résultat :
14 days
Par conséquent, si vous spécifiez également les days
argument, il sera ajouté aux jours produits par les weeks
arguments.
SELECT make_interval(weeks => 2, days => 3);
Résultat :
17 days
Style de sortie d'intervalle
Dans Postgres, le format de sortie du type d'intervalle peut être défini sur l'un des quatre styles d'intervalle suivants :
sql_standard
postgres
postgres_verbose
iso_8601
Vous pouvez définir cela en utilisant SET intervalstyle
. La valeur par défaut est postgres
formater.
Les exemples précédents utilisent tous le format par défaut (postgres
).
Voici un exemple qui illustre la sortie de make_interval()
lors de l'utilisation de différents styles de sortie.
sql_standard
SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Résultat :
+1-2 +25 +5:06:07
postgres
Il s'agit du paramètre par défaut.
SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Résultat :
1 an 2 mois 25 jours 05:06:07
postgres_verbose
SET intervalstyle = 'postgres_verbose';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Résultat :
@ 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);
Résultat :
P1Y2M25DT5H6M7S