String 如何在配置单元中提取字符串的一部分?
我想在蜂箱里做这个。以下是在sql server中工作的查询String 如何在配置单元中提取字符串的一部分?,string,hive,hiveql,String,Hive,Hiveql,我想在蜂箱里做这个。以下是在sql server中工作的查询 select LEFT('ENTERPRISE > DEMO', CHARINDEX('>', 'ENTERPRISE > DEMO') - 2) 基本上,我想提取左侧字符串中的所有字符。此外,此符号前面可以出现的字符数是可变的。 蜂巢中没有LEFT功能。如何使用substr或regexp\u extract实现此目的?HIVE支持INSTR,它返回的函数与CHARINDEX基本相同,但输入字段和测试值在函数中的顺
select LEFT('ENTERPRISE > DEMO', CHARINDEX('>', 'ENTERPRISE > DEMO') - 2)
基本上,我想提取
左侧字符串中的所有字符。此外,此符号前面可以出现的字符数是可变的。
蜂巢中没有
LEFT
功能。如何使用substr
或regexp\u extract
实现此目的?HIVE支持INSTR,它返回的函数与CHARINDEX基本相同,但输入字段和测试值在函数中的顺序相反,所以我会尝试
SELECT SUBSTR('ENTERPRISE > DEMO',1,INSTR('ENTERPRISE > DEMO','>') -2)
你可以用
1) substring
和instr
trim(substring(val,1,instr(val,'>')-1))
2) regexp\u extract
trim(regexp_extract(val,'(^.*)>',1))
除了已经提供的
regexp\u extract
和substr()
+instr()
解决方案外,您还可以使用split()
:
如果要删除空格,请应用trim():
hive> select trim(split('ENTERPRISE > DEMO','>')[0]);
OK
ENTERPRISE
或者可以按任意数量的空格+'>'+任意数量的空格进行拆分。split()使用regexp,无需使用trim():
谢谢你!!!修剪/分割效果更好,有助于消除我在空格方面遇到的一些问题。@buddykumar如果您对我的答案感到满意,请接受答案
hive> select trim(split('ENTERPRISE > DEMO','>')[0]);
OK
ENTERPRISE
hive> select trim(split('ENTERPRISE >DEMO',' *?> *?')[0]);
OK
ENTERPRISE
Time taken: 0.075 seconds, Fetched: 1 row(s)