蜂巢拆分字符串以获取除第一个以外的所有项目?

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字符串中只有一个元素,它不会替换。

【讨论】:

以上是关于蜂巢拆分字符串以获取除第一个以外的所有项目?的主要内容,如果未能解决你的问题,请参考以下文章

DataGrid - 折叠除第一个组以外的所有组

jQuery选择除第一个以外的所有内容

使用 OLE,从 OpenOffice/LibreOffice Calc 文档中删除除第一个以外的所有工作表,而不使用工作表名称

禁用除第一行以外的所有行,并在上面的行充满数据时启用每一行

cellForRowAtIndexPath 为除第一个以外的任何部分返回 nil

如何删除数组索引中除第0条以外的所有记录?