将双精度转换为文本的 Postgres 创建“1.50000000000”
Postgres converting double double precision to text creates '1.50000000000'
使用 postgres,我需要将总分钟数转换为 1h 1m 的格式。
我正在通过以下代码执行此操作
replace(
(119 / 60 + (119 % 60) / 100.0)::text,
'.',
'h '
) + 'm'
哪个returns 1h 59000000000000000000m
119 只是我添加的分钟数的示例,但这将在更大的查询上设置
(accumulated_minutes / 60 + (accumulated_minutes % 60) / 100.0)::text,
有没有办法在不增加额外精度的情况下将其转换为文本?
您可以尝试先将商或模数转换为整数,然后再转换为文本,例如
SELECT (119 / 60)::int::text || 'h ' || (119 % 60)::int::text || 'm';
这输出 1h 59m
.
让数据库为您完成繁重的工作!您可以将分钟数转换为 interval
数据类型,并使用 to_char()
进行格式化:
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 |
如果您想要取消小时和分钟的前导 0
,则:
to_char(make_interval(mins => accumulated_minutes), 'fmhh24"h" fmmi"m"') val
使用 postgres,我需要将总分钟数转换为 1h 1m 的格式。
我正在通过以下代码执行此操作
replace(
(119 / 60 + (119 % 60) / 100.0)::text,
'.',
'h '
) + 'm'
哪个returns 1h 59000000000000000000m
119 只是我添加的分钟数的示例,但这将在更大的查询上设置
(accumulated_minutes / 60 + (accumulated_minutes % 60) / 100.0)::text,
有没有办法在不增加额外精度的情况下将其转换为文本?
您可以尝试先将商或模数转换为整数,然后再转换为文本,例如
SELECT (119 / 60)::int::text || 'h ' || (119 % 60)::int::text || 'm';
这输出 1h 59m
.
让数据库为您完成繁重的工作!您可以将分钟数转换为 interval
数据类型,并使用 to_char()
进行格式化:
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 |
如果您想要取消小时和分钟的前导 0
,则:
to_char(make_interval(mins => accumulated_minutes), 'fmhh24"h" fmmi"m"') val