PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment make_interval() fonctionne dans PostgreSQL

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