如果我们在列中有时间戳 '2018-01-01 01:35:00.000' . 我想把时间戳四舍五入到小时,得到如下值 '2018-01-01 01:00:00.000' .
'2018-01-01 01:35:00.000'
'2018-01-01 01:00:00.000'
whitzsjs1#
对于提出的问题:
select from_unixtime(unix_timestamp('2018-01-01 01:35:00.000',"yyyy-MM-dd hh:mm:ss.sss"),'yyyy-MM-dd hh:00:00.000');
将时间列四舍五入到任意粒度一般方法:配置单元时间列名:结束时间配置单元时间列名日期格式:“yyyy-mm-dd hh:mm:ss”所需输出格式:“yyyy-mm-dd hh:mm:ss”舍入粒度:15min配置单元查询命令:
from_unixtime(unix_timestamp(time-column-name-in-hive,"time-column-name-in-hive-date-format")-unix_timestamp(time-column-name-in-hive,"time-column-name-in-hive-date-format")%900 (because 15*60), 'output-date-format')
假设结束时间列值:2019-11-29 08:23:27因此,以下命令将转换结束时间(例如2019-11-29 08:23:27到2019-11-29 08:15:00),给定粒度为15分钟
select from_unixtime(unix_timestamp(end_time,"yyyy-MM-dd hh:mm:ss")-unix_timestamp(end_time,"yyyy-MM-dd hh:mm:ss")%900, 'yyyy-MM-dd hh:mm:ss') from <table-name>;
hi3rlvi22#
所以你的问题不是圆形的,而是将时间格式缩短为小时。truncate函数只适用于日期(年、月和日),而不适用于时间。对于解决方法,可以使用以下代码段:
date_format('2018-01-01 01:35:00.000', 'YYYY-MM-dd hh:00:00.000')
结果:2018-01-01 01:00:00.000
bt1cpqcv3#
您可以使用from\u unixtime、unix\u timestamp函数来匹配输入数据并创建所需的输出格式。在您的情况下,输出格式为yyyy-mm-dd hh:00:00.000样品query:-
hive> select from_unixtime(unix_timestamp('2018-01-01 01:35:00.000',"yyyy-MM-dd hh:mm:ss.sss"),'yyyy-MM-dd hh:00:00.000'); +--------------------------+--+ | _c0 | +--------------------------+--+ | 2018-01-01 01:00:00.000 | +--------------------------+--+
(或)2.如果只需要日期,则将输出格式更改为yyyy-mm-dd
hive>select from_unixtime(unix_timestamp('2018-01-01 01:35:00.000',"yyyy-MM-dd hh:mm:ss.sss"),'yyyy-MM-dd'); +-------------+--+ | _c0 | +-------------+--+ | 2018-01-01 | +-------------+--+
3.提取年份和小时-->输出格式为yyyy hh
hive> select from_unixtime(unix_timestamp('2018-01-01 01:35:00.000',"yyyy-MM-dd hh:mm:ss.sss"),'yyyy ss'); +----------+--+ | _c0 | +----------+--+ | 2018 00 | +----------+--+
3条答案
按热度按时间whitzsjs1#
对于提出的问题:
将时间列四舍五入到任意粒度
一般方法:
配置单元时间列名:结束时间
配置单元时间列名日期格式:“yyyy-mm-dd hh:mm:ss”
所需输出格式:“yyyy-mm-dd hh:mm:ss”
舍入粒度:15min
配置单元查询命令:
假设结束时间列值:2019-11-29 08:23:27
因此,以下命令将转换结束时间(例如2019-11-29 08:23:27到2019-11-29 08:15:00),给定粒度为15分钟
hi3rlvi22#
所以你的问题不是圆形的,而是将时间格式缩短为小时。truncate函数只适用于日期(年、月和日),而不适用于时间。对于解决方法,可以使用以下代码段:
结果:2018-01-01 01:00:00.000
bt1cpqcv3#
您可以使用from\u unixtime、unix\u timestamp函数来匹配输入数据并创建所需的输出格式。在您的情况下,输出格式为yyyy-mm-dd hh:00:00.000
样品query:-
(或)
2.如果只需要日期,则将输出格式更改为yyyy-mm-dd
3.提取年份和小时-->输出格式为yyyy hh