sql - 将 double 转换为文本的 Postgres 创建 '1.50000000000'

标签 sql postgresql date datetime date-arithmetic

使用 postgres,我需要将总分钟数转换为 1h 1m 的格式。

我正在通过以下代码执行此操作

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

返回 1h 59000000000000000000m

119 只是我添加的分钟数的示例,但这将在更大的查询上设置

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

有没有办法在不增加额外精度的情况下将其转换为文本?

最佳答案

让数据库为您完成繁重的工作!您可以将分钟数转换为 interval 数据类型,并使用 to_char() 进行格式化:

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

Demo on DB Fiddle :

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

If you want to suppress the leading 0s on hours and minutes, then:

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

关于sql - 将 double 转换为文本的 Postgres 创建 '1.50000000000',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62329572/

相关文章:

java - @Where 子句在 hibernate 连接查询中不起作用

mysql - 如何访问子查询中的列?

php - 从 postgres 中检索数组

postgresql - 为什么 "setval()"会因 "relation ... does not exist"而失败?

Perl:在/Date/Manip.pm 处使用数字 lt (<) 中的未初始化值

java - 获得重叠时间的最简单方法

mysql - 如何在数据库中实现自定义字段

mysql - SQL 查询执行速度更快 - 表之间没有关系 - 更快生成结果

c# - 在 NHibernate 4 中,如何阻止 PostgreSQL 9.4 建立一堆 'idle in transaction' 连接?

java - 如何在 Android 中复制无法解析的日期错误?