0
点赞
收藏
分享

微信扫一扫

HiveSql一天一个小技巧:如何遍历字符串及获取索引位置

JamFF 2022-04-13 阅读 31

目录

0 问题描述

1 数据准备

2 问题分析

3 小结


0 问题描述

表名:t2
表字段及内容:
a
1011
0101
问题:如何将字符'1'的位置提取出来
输出结果如下所示:
1,3,4
2,4

1 数据准备

create table t2 as
select '1011' as a
UNION ALL
select '0101' as a

2 问题分析

核心思想:

核心SQL如下:

select a
      ,concat_ws(',',collect_list(cast(pos as string))) as res
from(
select t2.a as a
      ,t1.pos + 1 as pos --注意索引是从0开始的因此要加1
      ,t1.val as val
from t2 lateral view posexplode(split(a,'')) t1 as pos,val
) t
where val != '0' and val != ''
group by a

结果如下:

+-------+--------+
|   a   |  res   |
+-------+--------+
| 0101  | 2,4    |
| 1011  | 1,3,4  |
+-------+--------+

3 小结

本文给出了一种采用SQL语言遍历字符串的方法及技巧,主要采用split()函数及posexplode()函数进行解析字符串,并利用表生成函数与原表进行关联,这一技巧在处理字符串时候经常使用忘读者掌握。

举报

相关推荐

0 条评论