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 27/06/2016 15:38:15

Alain V.
Membre

[Résolu] Formatage de données TIME

Bonjour le forum,

Je souhaite afficher un chronométrage sous ce format :
00:00:42.15

CREATE TABLE matable (chrono time without time zone);
COPY matable (chrono) FROM STDIN;
00:00:42.00
00:00:42.15
\.
CREATE VIEW mavue AS SELECT * FROM matable;

Le résultat de la requête fait que les zéros de queue non significatifs
sont supprimés:
chrono
00:00:42
00:00:42.15

Je souhaite conserver ces zéros non significatifs car derrière, il y a
un script bash qui récupère la vue. Celui-ci travaille sur la longueur
de la chaîne et je ne souhaite pas le modifier.

En précisant le 100è de seconde dans la table,

CREATE TABLE matable (chrono time (2) without time zone);

comme le résultat est le même j'ai pensé chercher dans les fonctions de
formatage :
http://docs.postgresql.fr/8.2/functions … ting-table
On y parle de "to_char(timestamp, text)" alors que dans ma table ce
serait peut-être un "time --> texte"

Est-ce que je fais fausse route où y a-t-il une autre façon de ne pas
perdre ces zéros de queue dans la table?

Merci par avance.

Dernière modification par Alain V. (27/06/2016 16:37:04)

Hors ligne

#2 27/06/2016 15:49:55

Marc Cousin
Membre

Re : [Résolu] Formatage de données TIME

Bonjour,

Si vous voulez garantir un formatage d'une donnée, c'est bien la fonction to_char qu'il faut utiliser. Par contre, la difficulté ici, c'est que le type «time» est un peu un citoyen de seconde zone. Il n'a pas sa fonction to_char à lui. Par contre il a un cast implicite (c'est à dire qu'il sera appliqué automatiquement au besoin, dans tous les contextes) de time -> interval. Il faut donc écrire le to_char comme si c'était un intervalle, ce qui est assez facile, puisqu'un intervalle, c'est exactement comme un time, qui pourrait en plus stocker des semaines/jours/mois/années.

Je pense que ce to_char devrait vous aller:

select to_char('2:10:12'::time,'HH24:MI:SS.MS');
   to_char
--------------
 02:10:12.000
(1 row)
 

Marc.

Hors ligne

#3 27/06/2016 16:35:37

Alain V.
Membre

Re : [Résolu] Formatage de données TIME

En effet, maintenant  le format est de longueur fixe :

CREATE VIEW mavue AS
SELECT to_char (chrono::time,'HH24:MI:SS.MS') AS chrono
FROM matable;

    chrono   
--------------
00:00:42.000
00:00:42.150

Ce ne me sera pas trop difficile que de supprimer ce zéro de queue en trop pour avoir des centièmes de secondes.

Merci beaucoup pour la réponse.

Hors ligne

Pied de page des forums