在 postgresql 中将一天的列表,H-M-S 转换为小时格式
Convert a list in day,H-M-S to Hour format in postgresql
将我的整个列表(以天、小时-分钟-秒的格式)转换为仅小时(整数),因为我需要计算新列表的中位数。
为每个产品 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)
将我的整个列表(以天、小时-分钟-秒的格式)转换为仅小时(整数),因为我需要计算新列表的中位数。
为每个产品 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)