postgres将双精度转换为文本将创建“1.50000000000”

js81xvg6  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(340)

和博士后一起工作,我需要把总分钟数转换成1h-1m的格式。
我是通过下面的代码来实现的

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

返回1h 5900000000000000000M
119只是我添加的分钟数的一个示例,但这将在一个更大的查询上设置

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

有没有一种方法可以在不增加额外精度的情况下将其转换为文本?

esbemjvw

esbemjvw1#

让数据库帮你完成繁重的任务!你可以把分钟数变成 interval 数据类型和使用 to_char() 用于格式化:

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

db小提琴演示:

select to_char(make_interval(mins => 119), 'hh24"h" mi"m"') val
| val     |
| :------ |
| 01h 59m |

如果要抑制前导 0 在小时和分钟上,然后:

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

uqjltbpv2#

你可以先把商或模转换成整数,然后再转换成文本。

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

这个输出 1h 59m .

相关问题