конвертировать дату Unix в 24-часовой формат ISO - PullRequest
0 голосов
/ 16 января 2019

Я использую date_trunc, чтобы преобразовать время Unix в более читаемый формат.Однако значение для часа возвращает год и час с конечными нулями.Я хотел бы, чтобы формат отображал только чч: мм в военное время.Как мне этого добиться?

SELECT
    actor_id AS SRT_ID,
    shift_date,
    DATE_TRUNC('hour', from_unixtime(shift_start)) AS login,
    DATE_TRUNC('hour', from_unixtime(shift_end)) AS logout
FROM
    fct_rep_schedule_details
WHERE
    ds BETWEEN '2018-12-01' AND '2019-01-15'
GROUP BY 1,2,3,4

Например, я ожидаю, что результат будет 13:00 вместо 2019-01-22 13:00:00.000.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вместо усечения даты вы хотите отформатировать дату. Вы должны быть в состоянии отформатировать время с помощью следующего запроса:

SELECT
    actor_id AS SRT_ID,
    shift_date,
    DATE_FORMAT(from_unixtime(shift_start), '%H:%i') AS login,
    DATE_FORMAT(from_unixtime(shift_end), '%H:%i')  AS logout
FROM
    fct_rep_schedule_details
WHERE
    ds BETWEEN '2018-12-01' AND '2019-01-15'
GROUP BY 1,2,3,4

, где %H переводится в часы в 00 .. 23 и %i в минуты согласно документации prestoDB

0 голосов
/ 16 января 2019

Вы не хотите урезать дату. Вы хотите извлечь час / время. Вы можете извлечь время, используя cast():

SELECT actor_id AS SRT_ID,
       shift_date,
       DATE_TRUNC('hour', from_unixtime(shift_start)) AS login,
       DATE_TRUNC('hour', from_unixtime(shift_end)) AS logout,
       CAST(from_unixtime(shift_start) as time) AS login_hh,
       CAST(from_unixtime(shift_end) as time) AS logout_hh,
FROM fct_rep_schedule_details
WHERE ds BETWEEN '2018-12-01' AND '2019-01-15';

Если вы хотите контролировать форматирование времени, используйте to_char():

SELECT actor_id AS SRT_ID,
       shift_date,
       DATE_TRUNC('hour', from_unixtime(shift_start)) AS login,
       DATE_TRUNC('hour', from_unixtime(shift_end)) AS logout,
       TO_CHAR(from_unixtime(shift_start), 'HH:MI') AS login_hh,
       TO_CHAR(from_unixtime(shift_end), 'HH:MI') AS logout_hh,
FROM fct_rep_schedule_details
WHERE ds BETWEEN '2018-12-01' AND '2019-01-15';
...