REGEXP_SUBSTR
REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
select regexp_substr('1,2,3','[^,]+',1,1) result from dual;
运行结果:
1
按分隔符拆分字符串+CONNECT BY 动态参数
测试SQL:
SELECT
REGEXP_SUBSTR ('1,2,3,4,5', '[^,]+', 1,ROWNUM)
FROM dual
CONNECT BY ROWNUM <= LENGTH( '1,2,3,4,5' ) - LENGTH(regexp_replace('1,2,3,4,5', ',', '' )) + 1
运行结果:
1
2
3
4
5
split()函数是用于切分数据,也就是将一串字符串切割成了一个数组
语法:split(string str, string pat)
返回值:数组类型array
string str :待分割字符串
string pat:分割符
测试SQL:
select split ('wo,shi,xiao,ming',',');
运行结果:
["wo","shi","xiao","ming"]
explode()函数是用于打散行的函数,将一行的数据拆分成一列
explode(array/map类型)
select explode(array_col) as new_col from table_name
测试SQL:
select explode(array("wo","shi","xiao","ming")) as word;
运行结果:
wo
shi
xiao
ming
Lateral View用于和UDTF函数(explode、split)结合来使用
首先通过UDTF函数拆分成多行,再将多行结果组合成一个支持别名的虚拟表。虚拟表相当于再和主表关联, 从而达到添加“UDTF生成的字段“以外字段的目的, 即主表里的字段或者主表运算后的字段。
主要解决在select使用UDTF做查询过程中,查询只能包含单个UDTF,不能包含其他字段、以及多个UDTF的问题
lateral view UDTF(expression) table_view as new_column;
select col_type -- 已拆分数据
from table_name
lateral view explode(split(col,',')) t as col_type --col 为需要拆分的字段