如何在HIVE中提取字符串的一部分?

时间:2018-11-19 14:52:47

标签: hive hiveql

我希望在Hive中做到这一点。以下是可在sql server中使用的查询。

select LEFT('ENTERPRISE > DEMO', CHARINDEX('>', 'ENTERPRISE > DEMO') - 2)

基本上,我想提取>左侧字符串中的所有字符。另外,在此>符号之前可以出现的字符数是可变的。 蜂巢中没有LEFT函数。我该如何使用substrregexp_extract

3 个答案:

答案 0 :(得分:0)

HIVE支持INSTR,它返回的功能基本上与CHARINDEX相同,但是输入字段和测试值在函数中却是相反的,所以我会尝试

SELECT SUBSTR('ENTERPRISE > DEMO',1,INSTR('ENTERPRISE > DEMO','>') -2)

答案 1 :(得分:0)

您可以使用

1)chartdatasubstring的组合

instr

2)trim(substring(val,1,instr(val,'>')-1))

regexp_extract

答案 2 :(得分:0)

除了已经提供的regexp_extractsubstr() + instr()解决方案之外,您还可以使用split()

hive> select split('ENTERPRISE > DEMO','>')[0];
OK
ENTERPRISE
Time taken: 0.099 seconds, Fetched: 1 row(s)
hive> select split('ENTERPRISE > DEMO','>')[1];
OK
 DEMO
Time taken: 0.072 seconds, Fetched: 1 row(s)

如果要删除空格,请应用trim():

hive> select trim(split('ENTERPRISE > DEMO','>')[0]);
OK
ENTERPRISE

或者您可以分割任意数量的空格+'>'+任意数量的空格。 split()使用regexp,无需使用trim():

hive> select trim(split('ENTERPRISE >DEMO',' *?> *?')[0]);
OK
ENTERPRISE
Time taken: 0.075 seconds, Fetched: 1 row(s)