GaussDB(DWS)实践系列-List行转列函数实现
GaussDB(DWS)实践系列-List行转列函数实现
针对项目交付过程中遇到的List行转列的场景,GaussDB(DWS)提供regexp_split_to_table函数实现,本文进行详细介绍。
一、 客户场景
详细客户场景如下:
--测试表信息 create table movie_info(name varchar(20),category varchar(100)) distribute by hash(name); --插入数据 insert into movie_info values('<<革命者>>','战争,动作,剧情'); insert into movie_info values('<<唐人街探案>>','悬疑,动作,剧情'); insert into movie_info values('<<唐山大地震>>','动作,灾难,剧情'); --查询表信息: select * from movie_info; |
客户需求是将电影分类(categroy列)中的数组数据展开成如下形式进行展示:
name |
category |
<<革命者>> |
战争 |
<<革命者>> |
动作 |
<<革命者>> |
剧情 |
<<唐人街探案>> |
悬疑 |
<<唐人街探案>> |
动作 |
<<唐人街探案>> |
剧情 |
<<战狼>> |
战争 |
<<战狼>> |
动作 |
<<战狼>> |
灾难 |
二、 函数介绍
GaussDB(DWS)提供regexp_split_to_table函数支持List行转列场景,函数详细描述如下:
regexp_split_to_table(string text, pattern text [, flags text]) 【描述】用POSIX正则表达式作为分隔符,分隔string。如果没有与pattern的匹配,该函数返回string。如果有至少有一个匹配,对每一个匹配它都返回从上一个匹配的末尾(或者串的开头)到这次匹配开头之间的文本。当没有更多匹配时,它返回从上一次匹配的末尾到串末尾之间的文本。 flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。 返回值类型:setof text 【示例】SELECT regexp_split_to_table('hello world', E'\\s+');
|
三、 实现方法
regexp_split_to_table函数把一个POSIX正则表达式模式当作一个定界符来分离一个串。测试验证:
--查询语句 select name,regexp_split_to_table(category,',') from movie_info; --查询结果,符合需求
|
- 点赞
- 收藏
- 关注作者
评论(0)