Reputation: 433
Working with postgres and I need to convert total minutes into the format of 1h 1m.
I'm doing this via the following code
replace(
(119 / 60 + (119 % 60) / 100.0)::text,
'.',
'h '
) + 'm'
which returns 1h 59000000000000000000m
119 is just an example amount of minutes I've added, but this would be set on a larger query that would do
(accumulated_minutes / 60 + (accumulated_minutes % 60) / 100.0)::text,
is there a way to convert this to text without adding the extra precision?
Upvotes: 3
Views: 1245
Reputation: 222512
Let the database do the heavy lifiting for you! You can turn the number of minutes to an interval
datatype, and use to_char()
for formating:
to_char(make_interval(mins => accumulated_minutes), 'hh24"h" mi"m"')
select to_char(make_interval(mins => 119), 'hh24"h" mi"m"') val
| val | | :------ | | 01h 59m |
If you want to suppress the leading 0
s on hours and minutes, then:
to_char(make_interval(mins => accumulated_minutes), 'fmhh24"h" fmmi"m"') val
Upvotes: 3
Reputation: 521684
You may try first casting the quotient or modulus to integer, then casting to text after that, e.g.
SELECT (119 / 60)::int::text || 'h ' || (119 % 60)::int::text || 'm';
This outputs 1h 59m
.
Upvotes: 2