postgresql-9.3 - 在postgresql中将天,HMS中的列表转换为小时格式
问题描述
将我的整个列表(以天、小时-分钟-秒格式)转换为仅小时(整数),因为我需要计算新列表的中位数。
对于每个产品 ID,都会计算小时数。我只粘贴了一点我的清单。但是列表非常庞大,因此我无法对日期进行硬编码并找到所需的时间。相反,我想将我的整个列表转换为小时,因为我需要计算新列表的中位数。中位数仅采用一种数字格式。
SELECT
"FulfillmentHistories"."fulfillmentId",
(max("createdAt")-min("createdAt")) as "Range"
FROM
"FulfillmentHistories" //takes the time difference between two dates
where
"currentState" IN ('created','delivered')
GROUP BY
"FulfillmentHistories"."fulfillmentId"
HAVING COUNT("FulfillmentHistories"."createdAt")>1
ORDER BY "Range" DESC
这给了我两个日期戳之间的时间差异,因此结果给出了一个日、时-分-秒格式的列表。如图所示 在 postgresql 中需要一种格式的列表。请帮忙,谢谢!
Range
7 days, 4:30:56.324000
2 days, 18:26:25.955000
2 days, 16:38:25.600000
2 days, 15:01:34.488000
2 days, 11:37:27.956000
2 days, 8:15:20.769000
2 days, 6:59:28.396000
2 days, 5:13:47.411000
解决方案
好的,如下所示:
postgres=# select * from test_table ;
range
-------------------------
7 days, 4:30:56.324000
2 days, 18:26:25.955000
2 days, 16:38:25.600000
2 days, 15:01:34.488000
2 days, 11:37:27.956000
2 days, 8:15:20.769000
2 days, 6:59:28.396000
2 days, 5:13:47.411000
(8 rows)
postgres=# select
range,
extract(hour from replace((string_to_array(range,','))[2],' ','')::time) + replace((string_to_array(range,','))[1],' days','')::int * 24 as total_hours
from
test_table;
range | total_hours
-------------------------+-------------
7 days, 4:30:56.324000 | 172
2 days, 18:26:25.955000 | 66
2 days, 16:38:25.600000 | 64
2 days, 15:01:34.488000 | 63
2 days, 11:37:27.956000 | 59
2 days, 8:15:20.769000 | 56
2 days, 6:59:28.396000 | 54
2 days, 5:13:47.411000 | 53
(8 rows)
推荐阅读
- php - 本地主机中的 Wordpress 空白页
- linux - 使用 CuteCom 解析 GNSS 接收器数据
- python - 在 Airflow 中使用 jinja2 为 KubernetesPodOperator 构建列表
- python - Pandas - 将一个系列合并到我的主 DataFrame 中
- python - 如何正确地将熊猫数据框切片分配给另一个数据框中的值
- python - Python调试器在vscode中没有响应
- javascript - 为什么我的代码中未定义检查?'纯js'
- html - HTML 跨度类标签
- javascript - Discord.js v13 机器人不会加入语音频道
- node.js - 函数错误在离子角度中使用自然nodejs库