如何在配置单元中提取字符串的一部分?

htzpubme  于 2021-06-27  发布在  Hive
关注(0)|答案(3)|浏览(412)

我想在Hive里做这个。下面是一个在SQLServer中工作的查询。

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

基本上,我想把字符串中的所有字符提取到 > . 此外,可以在此之前显示的字符数 > 符号是可变的。根本没有 LEFT 在Hive中起作用。我怎么用 substr 或者 regexp_extract 为了这个?

8yparm6h

8yparm6h1#

hive支持instr,它返回与charindex基本相同的函数,但是输入字段和测试值在函数中是相反的,所以我会尝试

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

zf9nrax12#

你可以用
1) 组合 substring 以及 instr ```
trim(substring(val,1,instr(val,'>')-1))

2)  `regexp_extract` ```
trim(regexp_extract(val,'(^.*)>',1))
bogh5gae

bogh5gae3#

除了已经提供的解决方案之外 regexp_extract 以及 substr() + 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)

相关问题