GaussDB(DWS)实践系列-List行转列函数实现

举报
四叶草 发表于 2021/08/19 18:06:19 2021/08/19
【摘要】 针对项目交付过程中遇到的List行转列的场景,GaussDB(DWS)提供regexp_split_to_table函数实现,本文进行详细介绍。

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;

--查询结果,符合需求

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200