PostgreSQL 中关于字符串拆分与合并

with person_name as (
    select c.id,
           array_to_string(array_agg(distinct p.c_name), ' , ') as p_name
    from biz_notification_config c
             join biz_notification_person p
                  on p.id =
                      any (string_to_array(c.persons, ',')::int[])
    group by c.id
),

     group_name as (
         select c.id,
                array_to_string(array_agg(distinct g.c_name), ' , ') as g_name
         from biz_notification_config c
                  join biz_notification_group g
                       on g.id = any (string_to_array(c.c_groups, ',')::int[])
         group by c.id
     )

select config.*, person_name.p_name, group_name.g_name
from biz_notification_config config
         left join person_name
                   on config.id = person_name.id
         left join group_name
                   on config.id = group_name.id;

array_to_string(array_agg(distinct g.c_name), ’ , '):将数组转换为字符串,用“,”分隔。(有点类似于Mysql的group_concat()函数)。
array_agg(distinct 想要合并的数据):将想要的数据变成数组。
string_to_array(c.c_groups, ‘,’):将字符串按照“,”分隔成数组。
any (String(varchar)::int[]):将字符串转换为整形。
id = any(List):id的值存在于List中,注意List要和id为同种类型。

本人粗浅理解,要是有出错的地方希望各位大佬可以指正!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值