将我的整个列表(以天,小时-分钟-秒格式)转换为仅小时(是整数),因为我需要计算新列表的中位数。
对于每个产品编号,计算小时数。我只粘贴了一部分清单。但清单非常庞大,因此我无法对日期进行硬编码并无法找到所需的时间。相反,由于我需要计算新列表的中位数,因此希望将整个列表转换为小时。中位数仅采用一种数字格式。
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
答案 0 :(得分:0)
确定,如下所示:
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)