我想在Hive里做这个。下面是一个在SQLServer中工作的查询。
select LEFT('ENTERPRISE > DEMO', CHARINDEX('>', 'ENTERPRISE > DEMO') - 2)
基本上,我想把字符串中的所有字符提取到 > . 此外,可以在此之前显示的字符数 > 符号是可变的。根本没有 LEFT 在Hive中起作用。我怎么用 substr 或者 regexp_extract 为了这个?
>
LEFT
substr
regexp_extract
8yparm6h1#
hive支持instr,它返回与charindex基本相同的函数,但是输入字段和测试值在函数中是相反的,所以我会尝试
SELECT SUBSTR('ENTERPRISE > DEMO',1,INSTR('ENTERPRISE > DEMO','>') -2)
zf9nrax12#
你可以用1) 组合 substring 以及 instr ```trim(substring(val,1,instr(val,'>')-1))
substring
instr
2) `regexp_extract` ``` trim(regexp_extract(val,'(^.*)>',1))
bogh5gae3#
除了已经提供的解决方案之外 regexp_extract 以及 substr() + instr() ,您可以使用 split() :
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)
3条答案
按热度按时间8yparm6h1#
hive支持instr,它返回与charindex基本相同的函数,但是输入字段和测试值在函数中是相反的,所以我会尝试
zf9nrax12#
你可以用
1) 组合
substring
以及instr
```trim(substring(val,1,instr(val,'>')-1))
bogh5gae3#
除了已经提供的解决方案之外
regexp_extract
以及substr()
+instr()
,您可以使用split()
:如果要删除空格,请应用trim():
或者可以按任意数量的空格+“>”+任意数量的空格进行拆分。split()使用regexp,无需使用trim():