Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
je suis tout nouveau sur PostgreSQL (que j'ai en version 8.3) et je voudrais savoir s'il est possible d'extraire l'heure et les minutes d'un timestamp en une seule opération. J'ai consulté la doc (fonction to_char, to_timestamp, extract) mais je n'ai rien vu de direct. Je semble obligé de passer par une concaténation entre l'heure et les minutes mais cette opération me retourne un char qui ne m'autorise pas de calcul.
Avez-vous une solution?
Merci.
Hors ligne
Bonjour.
Sous quel format voulez-vous extraire l'heure et les minutes ? Une chaîne de caractère ou un format numérique ? Si c'est un format numérique, quels calculs voulez-vous faire ? (c'est-à-dire faut-il tout convertir en minute, ou utiliser la virgule ...)
Julien.
https://rjuju.github.io/
Hors ligne
Merci pour votre rapidité!
Je voudrais pouvoir afficher un format hh:mm et effectuer une somme des durées (à convertir en nombre de jours, heures et minutes). Il s'agit d'indicateurs de disponibilité de serveurs.
Hors ligne
select cast(to_char('2011-02-21 12:36'::timestamp, 'HH24') as integer) as heures, cast(to_char('2011-02-21 12:36'::timestamp, 'MI') as integer) as minutes
La première colonne est le nombre d'heures et la deuxième le nombre de minutes. Je ne vois pas trop l'intérêt de l'avoir en entier mais bon, c'est ce que vous demandez
Guillaume.
Hors ligne
Si vous voulez extraire les heures et minutes d'un timestamp pour effectuer des opérations dessus, je pense qu'il serait plus simple de passer par le type interval, qui est bien plus pratique pour ça.
Par exemple : marc=# SELECT current_timestamp - '2012-01-01'::timestamp;
?column?
-----------------------
2 days 15:23:22.66495
L'intervalle retourné peut servir à les calculs… par exemple:
SELECT (current_timestamp - '2012-01-01'::timestamp)*2 + '1 day 5 minutes'::interval;
?column?
------------------------
5 days 30:53:32.302404
Si vous voulez par exemple un intervalle de temps correspondant au nombre d'heures, minutes… de la journée:
SELECT current_timestamp - date_trunc('day', current_timestamp);
?column?
-----------------
15:25:47.403736
Si vraiment vous ne voulez que les heures et minutes, vous pouvez tronquer l'intervalle à la minute:
SELECT date_trunc('minute',current_timestamp - date_trunc('day', current_timestamp));
date_trunc
------------
15:27:00
L'intérêt, après cela, c'est qu'avec vos intervalles, vous pouvez faire toutes les opérations que vous voulez: les additionner, les soustraire, les multiplier ou diviser par des numériques, ou les ajouter ou soustraire à des timestamps.
Vous pouvez aussi extraire les heures, les minutes, etc… d'un intervalle avec extract.
Marc.
Hors ligne
Merci pour toutes ces informations. elles m'ont permis de résoudre mon problème et donc de progresser.
Hors ligne
Pages : 1