首页 > 解决方案 > 如何在配置单元中对字符串类型的日期进行分组

问题描述

我有一个日期列,数据类型是字符串,如下所示,

我的查询是: select cast(substr(date,1,10),date) date , count(date) from table group by date;

date

1   1/1/1970 12:00:00 AM
2   1/1/1970 12:00:00 AM
3   1/1/1970 12:00:00 AM
4   1/1/1970 12:00:00 AM
5   1/1/1970 12:00:00 AM
6   1/1/1970 12:00:00 AM
7   1/1/1970 12:00:00 AM
8   1/1/1970 12:00:00 AM
9   1/1/1970 12:00:00 AM
10  1/1/1970 12:00:00 AM

所以当我使用按日期分组时,同一天仍然有多行,我想我可能需要将数据类型转换为日期,但仍然无法正常工作,有人可以帮忙吗?

标签: sqltypesgroup-byhive

解决方案


Hive 中的日期格式为yyyy-MM-dd

如果您想将字符串字段转换为日期,请使用

hive> select date(from_unixtime(unix_timestamp(`date`, 'MM/dd/yyyy hh:mm:ss a'),'yyyy-MM-dd')) `date`,count(*) from dd group by date(from_unixtime(unix_timestamp(`date`, 'MM/dd/yyyy hh:mm:ss a'),'yyyy-MM-dd'));
+-------------+------+--+
|    date     | _c1  |
+-------------+------+--+
| 1970-01-01  | 10   |
+-------------+------+--+

在此语句中,我们将日期字段转换为日期数据类型并将所有日期分组。

(或者)

如果您只想分组,请MM/dd/yyyy使用拆分功能并分组

hive> select split(`date`,' ')[0] `date`,count(*) from dd group by split(`date`,' ')[0]; 
+-----------+------+--+
|   date    | _c1  |
+-----------+------+--+
| 1/1/1970  | 10   |
+-----------+------+--+

推荐阅读