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

Comment make_timestamp() fonctionne dans PostgreSQL

Dans PostgreSQL, le make_timestamp() permet de créer un horodatage à partir de ses champs année, mois, jour, heure, minute et seconde.

Syntaxe

La fonction a la syntaxe suivante :

make_timestamp(year int, month int, day int, hour int, min int, sec double precision)

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 résultat est renvoyé sous la forme d'un horodatage . Plus précisément, il est renvoyé sous la forme heure sans fuseau horaire .

Exemple

Voici un exemple de base pour illustrer.

SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);

Résultat :

2020-10-25 09:30:17.12

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

SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));

Résultat :

timestamp without time zone

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

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_timestamp(2020, 13, 25, 9, 30, 17.12);

Résultat :

ERROR: date field value out of range: 2020-13-25

Dans ce cas, le mois était 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_timestamp(2020, 10, 25, 25, 30, 17.12);

Résultat :

ERROR: time field value out of range: 25:30:17.12

Passer des chaînes comme arguments

La documentation Postgres indique que les arguments doivent être des entiers (et une double précision dans le cas des seconds argument), mais le passage de chaînes fonctionne également (probablement parce qu'elles sont implicitement converties en nombres entiers), tant que chaque argument est dans sa plage appropriée.

SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');

Résultat :

2020-12-25 10:30:17.12

Encore une fois, nous pouvons utiliser pg_type() pour vérifier le type de données résultant.

SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));

Résultat :

timestamp without time zone

Cependant, vous devez toujours vous assurer que chaque argument serait valide une fois converti en entier, sinon vous obtiendrez une erreur.

SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));

Résultat :

ERROR: date field value out of range: 2020-13-25

Horodatage avec fuseau horaire

Pour créer un horodatage avec fuseau horaire valeur, utilisez le make_timestamptz() fonction.