2017-01-08 4 views
0

Мне нужно преобразовать следующий (hh) целочисленный столбец в столбце времени. Ожидаемые результаты ниже:Postgres convert integer во время

hh  time 
1  00:00 
2  00:30 
3  01:00 
4  01:30 
... 
48  23:30 

Помогите?

+0

Это четвёртая полчаса из 48 половины ч. – user636322

+0

'select (make_interval (mins: = (hh-1) * 30)) :: time;' – Abelisto

ответ

2

Вы можете просто сделать:

select hh, ('00:00:00'::time + (hh - 1) * interval '30 minute') as time 
from t; 
+0

Отличные работы как шарм. благодаря – user636322

1

Use INTERVAL arithmetic

SELECT 
    TIME '00:00' + (1 - 1) * INTERVAL '30 minutes', 
    TIME '00:00' + (2 - 1) * INTERVAL '30 minutes', 
    TIME '00:00' + (3 - 1) * INTERVAL '30 minutes', 
    TIME '00:00' + (4 - 1) * INTERVAL '30 minutes', 
    TIME '00:00' + (5 - 1) * INTERVAL '30 minutes', 
    -- ... 
    TIME '00:00' + (48 - 1) * INTERVAL '30 minutes' 

Другим решением было бы работать с Unix временными метками:

SELECT 
    (to_timestamp((1 - 1) * 30 * 60) at time zone 'UTC')::time, 
    (to_timestamp((2 - 1) * 30 * 60) at time zone 'UTC')::time, 
    (to_timestamp((3 - 1) * 30 * 60) at time zone 'UTC')::time, 
    (to_timestamp((4 - 1) * 30 * 60) at time zone 'UTC')::time, 
    (to_timestamp((5 - 1) * 30 * 60) at time zone 'UTC')::time, 
    -- ... 
    (to_timestamp((48 - 1) * 30 * 60) at time zone 'UTC')::time