hive - 在 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'
但结果是空白的。
如何仅检索小时的两位数?
谢谢
解决方案
有几种方法可以hours
从timestamp
价值中提取。
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 |
+------+--+
推荐阅读
- amazon-web-services - 如何从 aws 导入所有现有基础设施状态并将其与生成的反向地形资源进行比较?
- flutter - 如何将多个文本值添加到 appbar Flutter
- android - Google Play:是否可以在订阅之间移动用户?
- javascript - 在默认提交之前强制再次提交
- spring-boot - 在调用控制器方法之前收到 400 Bad Request Error
- node.js - 使用 Lambda 从一系列日期从 S3 存储桶移动文件
- dataframe - 我想在 pyspark 数据框中按日期查找 MapType 中单词的频率?
- xaml - UWP C# WINUI NavigationView 如何访问其他页面/视图
- java - 是否有相当于 System.lineSeparator() 的仅用于回车?
- unity3d - 如果游戏上传到 Play 商店,则玩游戏服务未经过身份验证