如何在配置单元中对字符串类型中的日期进行分组

vs3odd8k  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(406)

我有一个日期列,数据类型是字符串,如下所示,
我的查询是:选择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

所以当我使用group by date时,同一天仍然有多行,我想我可能需要将数据类型转换为date,但是仍然不起作用,有人能帮忙吗?

iqjalb3h

iqjalb3h1#

配置单元中的日期格式为 yyyy-MM-dd 如果要将字符串字段强制转换为date,则使用

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   |
+-------------+------+--+

在这个语句中,我们将todate字段转换为date数据类型,并将所有日期分组。
(或)
如果你只想分组 MM/dd/yyyy 然后使用split函数和group by

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

wnvonmuf2#

如果你想要日期和列是一个刺,只要使用 substr() :

select substr(date, 10), count(*)
from t
group by substr(date, 10);

噢。我知道你的日期不是一个合理的格式(比如说mm/dd/yyyy)。你可以用 instring() :

select substr(date, 1, instring(date, ' ')) as dte, count(*)
from t
group by dte;

相关问题