我正在尝试从 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'
Run Code Online (Sandbox Code Playgroud)
命令的结果是: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'
Run Code Online (Sandbox Code Playgroud)
但结果是空白的。
如何只检索小时的两位数?
谢谢
您可以通过多种方式hours提取价值timestamp。
1.使用子字符串函数:
select substring(string("2017-06-05 09:06:32.0"),12,2);
+------+--+
| _c0 |
+------+--+
| 09 |
+------+--+
Run Code Online (Sandbox Code Playgroud)
2.使用Regexp_Extract:
select regexp_Extract(string("2017-06-05 09:06:32.0"),"\\s(\\d\\d)",1);
+------+--+
| _c0 |
+------+--+
| 09 |
+------+--+
Run Code Online (Sandbox Code Playgroud)
3.使用时间:
select hour(timestamp("2017-06-05 09:06:32.0"));
+------+--+
| _c0 |
+------+--+
| 9 |
+------+--+
Run Code Online (Sandbox Code Playgroud)
4.使用from_unixtime:
select from_unixtime(unix_timestamp('2017-06-05 09:06:32.0'),'HH');
+------+--+
| _c0 |
+------+--+
| 09 |
+------+--+
Run Code Online (Sandbox Code Playgroud)
5.使用日期格式:
select date_format(string('2017-06-05 09:06:32.0'),'hh');
+------+--+
| _c0 |
+------+--+
| 09 |
+------+--+
Run Code Online (Sandbox Code Playgroud)
6.使用分割:
select split(split(string('2017-06-05 09:06:32.0'),' ')[1],':')[0];
+------+--+
| _c0 |
+------+--+
| 09 |
+------+--+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10657 次 |
| 最近记录: |