Hive截取指定位子或字符后面的数据

Posted 小谢不缺女朋友

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive截取指定位子或字符后面的数据相关的知识,希望对你有一定的参考价值。

Hive截取指定字符后面的数据

一、规则

1、样例数据

Hive.Spark.Flink.Hadoop
Java.Python.Scala

2、题目要求

截取最后一个’.'后面的数据

3、结果预览

Hadoop
Scala

二、思路

方法1

使用substr()函数,在通过instr()函数找到结束位子,为了保证每次截取的都是最后一个’.'后面的数据,这里使用字符串反转函数reverse()。

select reverse(substr(reverse('Hive.Spark.Flink.Hadoop'),0,instr(reverse('Hive.Spark.Flink.Hadoop'),'.')-1));

select reverse(substr(reverse('Java.Python.Scala'),0,instr(reverse('Java.Python.Scala'),'.')-1));

答案:

方法2

使用regexp_extract()正则匹配函数。
regexp_extract()函数介绍:
1、语法
regexp_extract(string subject, string pattern, int index)
2、返回值
string
3、说明
将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

  1. 第一参数: 要处理的字段
  2. 第二参数: 需要匹配的正则表达式
  3. 第三参数:
    0 是显示与之匹配的整个字符串
    1 是显示第一个括号里面的
    2 是显示第二个括号里面的字段…
    注意,在有些情况下要使用转义字符(双斜杠了‘\\’)。
select regexp_extract('Hive.Spark.Flink.Hadoop','.*\\\\.(.*)',1);

select regexp_extract('Java.Python.Scala','.*\\\\.(.*)',1);

答案:

方法3

使用split()分割函数,在配合字符串反转函数reverse(),保证每次截取的都是最后一个’.'后面的数据。

select reverse(split(reverse('Hive.Spark.Flink.Hadoop'),'\\\\.')[0]);

select reverse(split(reverse('Java.Python.Scala'),'\\\\.')[0]);

答案:

以上是关于Hive截取指定位子或字符后面的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用hive确定字符位置?例如,字符规则是aaaa_aaa想提取'_'后面的内容,怎么操作

HIVE 字符串截取

大数据之Hive:hive截取字符串substr和substring的用法

编写Spark的UDF函数解决Hive表大数bigintdoublefloatdecimal等转字符串string时出现的科学计数法问题Java

编写Spark的UDF函数解决Hive表大数bigintdoublefloatdecimal等转字符串string时出现的科学计数法问题Java

急!急!急!急!!!SQL里面的字符怎么用一条SQL语句将逗号后面的字符串得到?