PostgreSQL 字符串分隔函数(regexp_split_to_table)介绍以及示例应用

发布于:2023-09-14 ⋅ 阅读:(248) ⋅ 点赞:(0)

PostgreSQL 字符串分隔函数(regexp_split_to_table)介绍以及示例应用

在项目开发中,有时会遇到需要按某个字符拆分列数据的情况,本文详细介绍 postgre 数据库拆分字符(regexp_split_to_table)以及实际项目应用。

PostgreSQL 字符串分隔函数

-- 分割成数组,可以使用下标取值
select (regexp_split_to_array('11,22,33',','))[2];
-- 分割成虚拟表,可以直接当做正常表使用,进行连接查询,增加查询条件等等
select re from regexp_split_to_table('11,22,33',',') re where re='11';

PostgreSQL 字符串分隔函数示例应用

实际项目需求

在我们项目中,需要按一定的条件统计机构大学的数量并排名,数据库表中有些数据是以分号 ( ; )拼接的多个机构大学,
比如:武汉大学;河北省电力公司电力科学研究院

这样的话,直接统计是错误的,需要先把数据按分号 ( ; )拆分成独立的大学和机构,再进行统计数量。

实际数据

直接查询数据是 1168 条。

在这里插入图片描述

拆分数据

先使用 regexp_split_to_table 函数查看一下拆分后数据,拆分后大学和机构为 2797 条。

SELECT
	regexp_split_to_table( applicant, ';' ) AS inventor_
FROM
    表名 
-- 查询条件已省略

在这里插入图片描述

这里查看一下拆分后数据,可以看到,同样查询条件,数据已经被拆分开了,统计拆分数据才可以得到正确的结果。

实际应用

在项目中,我们将拆分后数据作为虚拟表进行查询统计。

查询执行过程为:首先根据查询条件查询出符合要求数据,然后拆分数据,最后统计总数。

sql 语句

SELECT
	regexp_split_to_table( applicant, ';' ) AS inventor_,
    COUNT ( * ) 
FROM
	表名 pt 
WHERE
	-- 查询条件已省略 
GROUP BY
	inventor_ 
ORDER BY
COUNT DESC 
LIMIT 10

统计数据
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到