首页 > 解决方案 > 在 hive 中获取子字符串

问题描述

我正在尝试从 Hive 获取字符串的子字符串。我有一个这样的字符串:2017-06-05 09:06:32.0

我想要的是从小时中获取前两位数字,即 09。我使用以下命令获取整个小时:

SELECT SUBSTR(hora,11) AS subhoras FROM axmugbcn18.bbdd WHERE hora =  '2017-06-05 09:06:32.0'

命令的结果是:09:06:32.0

为了只得到 09 我试试这个命令:

SELECT REGEXP_EXTRACT(hora,'\d\d') AS subhoras FROM axmugbcn18.bbdd WHERE hora = '2017-06-05 09:09:32.0'

但结果是空白的。

如何仅检索小时的两位数?

谢谢

标签: hivehiveql

解决方案


几种方法可以hourstimestamp价值中提取。

1.使用子串函数:

select substring(string("2017-06-05 09:06:32.0"),12,2);
+------+--+
| _c0  |
+------+--+
| 09   |
+------+--+

2.使用Regexp_Extract:

select regexp_Extract(string("2017-06-05 09:06:32.0"),"\\s(\\d\\d)",1);
+------+--+
| _c0  |
+------+--+
| 09   |
+------+--+

3.使用时间:

select hour(timestamp("2017-06-05 09:06:32.0"));
+------+--+
| _c0  |
+------+--+
| 9    |
+------+--+

4.使用from_unixtime:

select from_unixtime(unix_timestamp('2017-06-05 09:06:32.0'),'HH');
+------+--+
| _c0  |
+------+--+
| 09   |
+------+--+

5.使用日期格式:

select date_format(string('2017-06-05 09:06:32.0'),'hh');
+------+--+
| _c0  |
+------+--+
| 09   |
+------+--+

6.使用拆分:

select split(split(string('2017-06-05 09:06:32.0'),' ')[1],':')[0];
+------+--+
| _c0  |
+------+--+
| 09   |
+------+--+

推荐阅读