我希望在Hive中做到这一点。以下是可在sql server中使用的查询。
select LEFT('ENTERPRISE > DEMO', CHARINDEX('>', 'ENTERPRISE > DEMO') - 2)
基本上,我想提取>
左侧字符串中的所有字符。另外,在此>
符号之前可以出现的字符数是可变的。
蜂巢中没有LEFT
函数。我该如何使用substr
或regexp_extract
?
答案 0 :(得分:0)
HIVE支持INSTR,它返回的功能基本上与CHARINDEX相同,但是输入字段和测试值在函数中却是相反的,所以我会尝试
SELECT SUBSTR('ENTERPRISE > DEMO',1,INSTR('ENTERPRISE > DEMO','>') -2)
答案 1 :(得分:0)
您可以使用
1)chartdata
和substring
的组合
instr
2)trim(substring(val,1,instr(val,'>')-1))
regexp_extract
答案 2 :(得分:0)
除了已经提供的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)