GaussDB(DWS)实践系列-List行转列函数实现
【摘要】 针对项目交付过程中遇到的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)