蜂巢拆分字符串以获取除第一个以外的所有项目?
Posted
技术标签:
【中文标题】蜂巢拆分字符串以获取除第一个以外的所有项目?【英文标题】:Hive split string to get all the items except first one? 【发布时间】:2020-03-17 11:12:21 【问题描述】:我有一个类似“abc,def,ghi,jkl”的列数据“testdata”,我想将输出检索为“def,ghi,jkl”
我能够像这样检索第一个数据
SELECT split(testdata,'[\,]')[0] FROM tablename;
我需要一个类似的单一查询来获取除第一个之外的所有项目。
【问题讨论】:
【参考方案1】:建议的方法是:
select substr("abc,def,ghi,jkl",5);
Select substr(testdata,5) FROM tablename;
【讨论】:
谢谢。但是需要根据第一次出现的“,”进行拆分,然后取出所有帖子。这不会根据“,”拆分。另外,我们不应该将长度硬编码为第一个逗号后的值可以是动态的。意味着我们也可以有 10 个逗号分隔值。所以我的解决方案会处理这些【参考方案2】:可以这样完成
select regexp_extract(testdata,'^(.*?)(?:,)(.*)$', 2) from tablename;
【讨论】:
【参考方案3】:with tablename as (
select "abc,def,ghi,jkl" as testdata
) -- test data
select regexp_replace(testdata,concat_ws("","^(",split(testdata,"[\,]")[0],",)"),"") as testdata
from tablename;
+--------------+--+
| testdata |
+--------------+--+
| def,ghi,jkl |
+--------------+--+
注意:如果testdata字符串中只有一个元素,它不会替换。
【讨论】:
以上是关于蜂巢拆分字符串以获取除第一个以外的所有项目?的主要内容,如果未能解决你的问题,请参考以下文章
使用 OLE,从 OpenOffice/LibreOffice Calc 文档中删除除第一个以外的所有工作表,而不使用工作表名称