PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 03/01/2012 15:08:23

jfox
Membre

Extraire heure et minutes d'un timestamp

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

#2 03/01/2012 15:16:01

rjuju
Administrateur

Re : Extraire heure et minutes d'un timestamp

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 ...)

Hors ligne

#3 03/01/2012 15:29:27

jfox
Membre

Re : Extraire heure et minutes d'un timestamp

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

#4 03/01/2012 15:48:17

gleu
Administrateur

Re : Extraire heure et minutes d'un timestamp

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 smile


Guillaume.

Hors ligne

#5 03/01/2012 16:29:09

Marc Cousin
Membre

Re : Extraire heure et minutes d'un timestamp

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

#6 03/01/2012 17:32:34

jfox
Membre

Re : Extraire heure et minutes d'un timestamp

Merci pour toutes ces informations. elles m'ont permis de résoudre mon problème et donc de progresser.

Hors ligne

Pied de page des forums