Конвертировать список в день, H-M-S в час формат в postgresql - PullRequest
0 голосов
/ 13 июня 2019

Конвертируйте весь мой список, который представлен в днях, часах-мин-сек. В ФОРМАТ, только в часы, которые являются целым числом, потому что мне нужно вычислить медиану нового списка.

Для каждого идентификатора продукта рассчитывается количество часов. Я только вставил немного своего списка. но список очень большой, поэтому я не могу жестко закодировать даты и найти часы, которые на это требуются. Вместо этого я хочу преобразовать весь мой список в часы, так как мне нужно вычислить медиану нового списка. Медиана принимает только один формат в числах.

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

1 Ответ

0 голосов
/ 13 июня 2019

ОК, как показано ниже:

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)
...