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

Comment make_time() fonctionne dans PostgreSQL

Dans PostgreSQL, le make_time() permet de créer une heure à partir de ses champs heure, minute et seconde.

Syntaxe

La fonction a la syntaxe suivante :

make_time(hour int, min int, sec double precision)

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

Exemple

Voici un exemple de base pour illustrer.

SELECT make_time(7, 45, 15.08);

Résultat :

07:45:15.08

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

SELECT pg_typeof(make_time(7, 45, 15.08));

Résultat :

time without time zone

Le pg_typeof() la fonction renvoie le type de données de son argument, et j'ai donc passé make_time() 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_time(25, 45, 15.08);

Résultat :

ERROR: time field value out of range: 25:45:15.08

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 se trouve dans sa plage appropriée.

SELECT make_time('7', '45', '15.08');

Résultat :

07:45:15.08

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

SELECT pg_typeof(make_time('7', '45', '15.08'));

Résultat :

time 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 make_time('25', '45', '15.08');

Résultat :

ERROR: time field value out of range: 25:45:15.08