首页 > 解决方案 > 将 unix 日期转换为 24 小时 ISO 格式

问题描述

我正在使用 date_trunc 将 unix 时间转换为更易读的格式。但是,'hour' 的值返回带有尾随 0 的年份和小时。我希望格式只在军事时间显示 hh:mm。我怎样才能做到这一点?

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.

标签: sqlpresto

解决方案


您不想截断日期。您想提取小时/时间。您可以使用以下方法提取时间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';

推荐阅读