今天上班期间,有同事提在群里提出了一个问题,问opengauss数据库中如何将字符串拆分为一列多行的形式,我们都知道,opengauss数据库和PostgreSQL数据库语法基本是一致的,以字符串 ‘赵钱孙李周吴郑王’ 为例,

一:PostgreSQL数据库拆分字符串

1:在PostgreSQL数据库中拆分一个字符串用到的是regexp_split_to_table函数,regexp_split_to_table 是 PostgreSQL 中的一个函数,用于将一个字符串根据正则表达式进行分割,并将结果返回为一个表格(每个分割后的部分作为一行)。这个函数非常有用,特别是在处理复杂字符串时。

我们先来看看regexp_split_to_table函数在pg数据库执行的结果

select regexp_split_to_array('赵钱孙李周吴郑王', '');--将字符串转化为数组

574ba59096eb49a99baaf8afcdf7551b.png

2:在PostgreSQL数据库中拆分一个字符串还可以用到regexp_split_to_array函数,该函数用于分割字符串至数组元素,使用正则表达式分割字符串

select regexp_split_to_array('赵钱孙李周吴郑王', '');--将字符串转化为数组

862182ceb2ee49faa6a0fea540099731.png

再用unnest函数将数组转化为多行,即行专列,请看执行结果

select regexp_split_to_array('赵钱孙李周吴郑王', '');--将字符串转化为数组

 

9f471a53dae54ecd94740a043f8bf0cf.png

 

 二:opengauss数据库拆分字符串

由于pg数据库和opengauss数据库的语法差异,使用在regexp_split_to_table()函数的使用上,也有差异,由于博主本地没有搭建高斯数据库环境,所以直接将代码展示出来,有兴趣的同学们可以自己在opengauss数据库上去做测试

opengauss拆分字符串有三种方法

1:select regexp_split_to_table('赵钱孙李周吴郑王', '()');--至于为什么第二个参数是'()',这个博主也是靠试出来的,有知道的同学们写在评论区。

2:select "unnest"(regexp_split_to_array('赵钱孙李周吴郑王', NULL));--此函数的第二个参数为NULL。

3:WITH tmp AS (
SELECT generate_series (1,LENGTH ('赵钱孙李周吴郑王')) AS pos)
SELECT SUBSTRING ('赵钱孙李周吴郑王' FROM pos FOR 1) FROM tmp;--此语法pg和og语法通用

目录

一:PostgreSQL数据库拆分字符串

1:在PostgreSQL数据库中拆分一个字符串用到的是regexp_split_to_table函数,regexp_split_to_table 是 PostgreSQL 中的一个函数,用于将一个字符串根据正则表达式进行分割,并将结果返回为一个表格(每个分割后的部分作为一行)。这个函数非常有用,特别是在处理复杂字符串时。

2:在PostgreSQL数据库中拆分一个字符串还可以用到regexp_split_to_array函数,该函数用于分割字符串至数组元素,使用正则表达式分割字符串

 二:opengauss数据库拆分字符串

1:select regexp_split_to_table('赵钱孙李周吴郑王', '()');--至于为什么第二个参数是'()',这个博主也是靠试出来的,有知道的同学们写在评论区。

2:select "unnest"(regexp_split_to_array('赵钱孙李周吴郑王', NULL));--此函数的第二个参数为NULL。

3:WITH tmp AS (SELECT generate_series (1,LENGTH ('赵钱孙李周吴郑王')) AS pos)SELECT SUBSTRING ('赵钱孙李周吴郑王' FROM pos FOR 1) FROM tmp;--此语法pg和og语法通用

(1)generate_series() 是一个非常实用的内置函数,它能够根据给定的起始值和结束值生成一系列连续的数字。

(2)再根据SUBSTRING函数从对应位置截取对应位置数字的字符,输出

​编辑


 

e43248f9b6fd44fb972304c1608a7312.png

(1)generate_series() 是一个非常实用的内置函数,它能够根据给定的起始值和结束值生成一系列连续的数字。

generate_series()函数语法如下

generate_series(start, stop, step)

   start: 序列的起始值。
    stop: 序列的结束值。
    step: 序列的步长(可选)。默认为 1。

(2)再根据SUBSTRING函数从对应位置截取对应位置数字的字符,输出

8cd3eba8c0e040bcbdb2be4638579b88.png

 

 

 

 

 

 

 

 

 

 

 

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐