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

Comment make_timestamptz() fonctionne dans PostgreSQL

Dans PostgreSQL, le make_timestamptz() la fonction vous permet de créer un horodatage avec fuseau horaire à partir de ses champs année, mois, jour, heure, minute et seconde, ainsi que d'un champ fuseau horaire facultatif.

Syntaxe

La fonction a la syntaxe suivante :

make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])

year , month , et day sont des nombres entiers représentant l'année, le mois et le jour de la date, et hour est la partie heure, min est la partie minutes, et sec est la partie des secondes.

L'heure et les minutes sont fournies sous la forme d'un entier , les secondes sont fournies en double précision .

Le timezone facultatif l'argument est pour le fuseau horaire. S'il n'est pas spécifié, le fuseau horaire actuel est utilisé.

Le résultat est renvoyé sous la forme d'une heure avec fuseau horaire .

Exemple

Voici un exemple de base pour illustrer.

SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);

Résultat :

1999-03-14 10:35:12.15+10

Dans ce cas, je n'ai pas fourni de fuseau horaire, il a donc utilisé le fuseau horaire actuel.

Nous pouvons vérifier le type de retour avec la requête suivante.

SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));

Résultat :

timestamp with time zone

Le pg_typeof() la fonction renvoie le type de données de son argument, et j'ai donc passé make_timestamptz() comme argument.

Spécifiez un fuseau horaire

Dans cet exemple, je fournis explicitement un fuseau horaire.

SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');

Résultat :

1999-03-14 16:35:12.15+10

Voici un autre exemple, mais avec différentes valeurs de fuseau horaire.

\x
SELECT 
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACDT'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACST'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACT'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, '+01'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, '-01'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'NZ');

Résultat (en utilisant la sortie verticale) :

make_timestamptz | 1999-12-31 23:31:00+10
make_timestamptz | 2000-01-01 00:31:00+10
make_timestamptz | 2000-01-01 15:01:00+10
make_timestamptz | 2000-01-01 09:01:00+10
make_timestamptz | 2000-01-01 11:01:00+10
make_timestamptz | 1999-12-31 21:01:00+10

Dans cet exemple, j'ai utilisé \x pour activer l'affichage étendu (également appelé "sortie verticale") afin de faciliter la lecture des résultats.

Saisie de \x bascule l'affichage étendu (c'est-à-dire qu'il l'active et le désactive).

Consultez Renvoyer une liste des fuseaux horaires pris en charge par PostgreSQL pour obtenir une liste des fuseaux horaires valides.

Hors de portée

Si l'un des arguments est hors de la plage des valeurs possibles pour sa partie date, vous obtiendrez une erreur "hors plage".

SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);

Résultat :

ERROR: date field value out of range: 1999-03-32

Dans ce cas, le jour était 32, ce qui est hors plage, et le message expliquait donc que la valeur du champ de date était hors plage.

Si seule la valeur du champ de temps est hors plage, l'erreur est formulée en conséquence.

SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);

Résultat :

ERROR: time field value out of range: 10:61:12.15

Dans ce cas, les minutes l'argument est 61, ce qui est hors limites.

Horodatage sans fuseau horaire

Pour créer un horodatage sans fuseau horaire, utilisez le make_timestamp() fonction.