SQL篇·Oracle字段根据逗号等分割

一、业务场景介绍

有一个表字段存储了另一个表的关联字段,以“|”符号分割,如下所示:

连接查询中当然可以使用like来关联,但是效率很差。高效的做法应该是将该字段按照“|”字符分割,然后关联查询。

二、oracle分割查询方法

SELECT
	regexp_substr( 'a|b|c', '[^|]+', 1, ROWNUM ) result
FROM
	dual CONNECT BY ROWNUM <= length(
	regexp_replace( 'a|b|c', '[^|]', NULL )) + 1;

查询结果:

这个是原始的写法,“|”可以是别的字符,可以拿来修改。

三、应用

应用在我的场景中就是:

-- 分割pro_ids
SELECT
	regexp_substr( t.PRO_IDS, '[^|]+', 1, ROWNUM ) pro_ids
FROM
	( SELECT * FROM CMS_ARTICLE_PREVIEW WHERE id = '3918' ) t 
CONNECT BY ROWNUM <= length(regexp_replace( t.PRO_IDS, '[^|]', NULL )) + 1;

查询结果:

查询产品信息可以继续调整sql:

-- 分割pro_ids,并查询出相应产品信息
SELECT * FROM P_PRODUCT_PUBLICINFO WHERE FUNDCODE IN (
	SELECT
		regexp_substr( t.PRO_IDS, '[^|]+', 1, ROWNUM ) pro_ids
	FROM
		( SELECT * FROM CMS_ARTICLE_PREVIEW WHERE id = '3918' ) t 
	CONNECT BY ROWNUM <= length(regexp_replace( t.PRO_IDS, '[^|]', NULL )) + 1
);

为了信息保密性,此处不截图了。

当然,最终实际场景应用的sql更加复杂,这里只记录样例,需要时可以拿来灵活调整。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值