3 votes

La conversion par Postgres de la double précision en texte crée '1.50000000000'.

Je travaille avec postgres et j'ai besoin de convertir le total des minutes dans le format 1h 1m.

Je fais cela via le code suivant

replace(
    (119 / 60 + (119 % 60) / 100.0)::text, 
    '.', 
    'h '
) + 'm'

qui renvoie 1h 59000000000000000000m

119 n'est qu'un exemple de nombre de minutes que j'ai ajouté, mais cela serait mis en place sur une requête plus importante qui ferait

(accumulated_minutes / 60 + (accumulated_minutes % 60) / 100.0)::text, 

Existe-t-il un moyen de convertir ce texte en texte sans ajouter la précision supplémentaire ?

3voto

GMB Points 188687

Laissez la base de données faire le gros du travail pour vous ! Vous pouvez transformer le nombre de minutes en un interval et utiliser to_char() pour le formage :

to_char(make_interval(mins => accumulated_minutes), 'hh24"h" mi"m"')

Démonstration sur DB Fiddle :

select to_char(make_interval(mins => 119), 'hh24"h" mi"m"') val

| val     |
| :------ |
| 01h 59m |

Si vous voulez supprimer le premier 0 s sur les heures et les minutes, alors :

to_char(make_interval(mins => accumulated_minutes), 'fmhh24"h" fmmi"m"') val

2voto

Tim Biegeleisen Points 53335

Vous pouvez essayer de convertir d'abord le quotient ou le module en entier, puis de le convertir en texte après cela, par ex.

SELECT (119 / 60)::int::text || 'h ' || (119 % 60)::int::text || 'm';

Ces sorties 1h 59m .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X