postgresql 字符串分割字段转列表查询

用法1:

如图:想要将parent_nums 中的字符串拆分成列表


select
   t.id,
    t.tab_interest
from (
    select id, regexp_split_to_table(parent_nums, ',') as tab_interest from  pm.temp_cate
) t  where  t.tab_interest != '';

结果:

 

用法二:

在数据查询中,有一张a表存有另一张b表的id并以‘,’隔开

如:

 

假设现在要关联查询关于 b表的一些信息,怎么办。

分割查询:字符串转列表函数 :regexp_split_to_table()

select * from regexp_split_to_table ((select product_ids from fee_project_meal where id = 116199376233182210 ), ',')

查询后,字符串就变成了列表,然后你就可以根据这个列表去找b表的相关信息了。


select *
from  pm.product 
where id::text in 
(select * from regexp_split_to_table ((select product_ids from bp.fee_project_meal where id = 116199376233182210 ), ','))

首先数据验证是正确的,说明sql没有问题,接下来就是一起关联查询了

1.因为这个a表与b表是一对多的关系,所以我们先关联出多条。


select a.id as "a表_id",
a.name as "a表_name",
p.name as "b表_name"
from bp.fee_project_meal a
LEFT JOIN pm.product p on p.id::text 
in (select * from regexp_split_to_table ((select product_ids from bp.fee_project_meal where id = a.id ), ','))
where a.id = 116199376233182210

2.还有一种就是 我只要查出a表的数据,b表的数据中某些字段做未拼接的形式存在,也就是说 现在要查出a表的数据

 SELECT
   a.id as "a表_id",
     a.name as "a表_name",
        bb.p_id as "b表_拼接id",
        bb.p_name as "b表_拼接name"
    from bp.fee_project_meal a
        left join (
select a.id as "bb_id",String_agg(p.id::text,',') as "p_id",String_agg(p.name::text,',') as "p_name"
from bp.fee_project_meal a
LEFT JOIN pm.product p on 
p.id::text in (select * from regexp_split_to_table ((select product_ids from bp.fee_project_meal where id = a.id ), ','))
GROUP BY 1
) bb on bb."bb_id" = a.id
  

以上就是,字符串字段的拆解查询。

 

 

 

 

 

 

 

 

 

 

 

 

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Postgresql中可以使用split_part函数对字符串进行分割,具体用法如下: ``` split_part(string, delimiter, field) ``` 其中,string为待分割字符串,delimiter为分隔符,field为需要获取的分割后的子串的位置(从1开始计数)。 例如,想要获取字符串"hello,world"中的第二个子串,可以使用如下语句: ``` SELECT split_part('hello,world', ',', 2); ``` 执行结果为"world"。 另外,如果你想要截取字符串的一部分,可以使用substring函数,具体用法如下: ``` substring(string from start for length) ``` 其中,string为待截取的字符串,start为截取的起始位置,length为截取的长度。 例如,想要截取字符串"hello,world"中的第一个子串,可以使用如下语句: ``` SELECT substring('hello,world' from 1 for 5); ``` 执行结果为"hello"。 ### 回答2: 在PostgreSQL中,可以使用split_part函数来分割字符串。 split_part函数需要三个参数:字符串、分隔符、分割的位置。 例如,我们有以下字符串:'Hello,World,This,is,PostgreSQL',我们想要按照逗号分隔字符串,我们可以使用如下的SQL语句进行分割: SELECT split_part('Hello,World,This,is,PostgreSQL', ',', 1) AS part1, split_part('Hello,World,This,is,PostgreSQL', ',', 2) AS part2, split_part('Hello,World,This,is,PostgreSQL', ',', 3) AS part3 执行上述SQL语句后,我们会得到以下结果: part1: 'Hello' part2: 'World' part3: 'This' 这样,我们就功地将字符串按照逗号进行了分割。 需要注意的是,如果分割的位置超过了字符串的实际分割数量,则会返回空字符串。 除了split_part函数外,PostgreSQL还提供了其他函数,如substring、strpos等,用于字符串的截取和查找。根据实际需求,可以选择合适的函数来处理字符串。 ### 回答3: PostgreSQL提供了多种方法来进行字符串分割和截取。 1. 使用split_part函数:split_part函数可以将一个字符串根据指定的分隔符进行分割,并返回指定位置的子字符串。其语法如下: split_part(string, delimiter, position) 例如,要截取字符串"Hello,World"中的"World",可以使用以下语句: SELECT split_part('Hello,World', ',', 2); 结果为"World"。 2. 使用substring函数:substring函数可以从一个字符串中截取指定位置和长度的子字符串。其语法如下: substring(string from start_position [for length]) 例如,要截取字符串"Hello,World"中的"World",可以使用以下语句: SELECT substring('Hello,World' from 7); 结果为"World"。 3. 使用regexp_split_to_table函数:regexp_split_to_table函数可以根据正则表达式将一个字符串分割多个行,并以表格的形式返回。其语法如下: regexp_split_to_table(string, pattern) 例如,要将字符串"Hello,World"按逗号分隔并以表格形式返回,可以使用以下语句: SELECT regexp_split_to_table('Hello,World', ','); 结果为两行:"Hello"和"World"。 这些方法可以根据实际需求选择适合的方式进行字符串分割和截取。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值