一、业务场景介绍

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

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

二、oracle分割查询方法

SELECTregexp_substr( 'a|b|c', '[^|]+', 1, ROWNUM ) result
FROMdual CONNECT BY ROWNUM <= length(regexp_replace( 'a|b|c', '[^|]', NULL )) + 1;

查询结果:

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

三、应用

应用在我的场景中就是:

-- 分割pro_ids
SELECTregexp_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 (SELECTregexp_substr( t.PRO_IDS, '[^|]+', 1, ROWNUM ) pro_idsFROM( SELECT * FROM CMS_ARTICLE_PREVIEW WHERE id = '3918' ) t CONNECT BY ROWNUM <= length(regexp_replace( t.PRO_IDS, '[^|]', NULL )) + 1
);

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

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

SQL篇·Oracle字段根据逗号等分割相关推荐

  1. SQL篇-修改字段、数据

    SQL中的操作通常分为对字段和数据的修改,其中修改分为增.删.改 目录 1.字段的修改 2.数据的修改 1.字段的修改 增加字段 ALTER TABLE <表名> ADD <新字段名 ...

  2. oracle 字段以逗号结尾的更新 数据库_Oracle数据库某个字段的值为逗号分隔的多个值组成的字符串,以一个多选的下拉框进行查询...

    某个字段的值为逗号分隔的多个值组成的字符串,现在需要通过一个可以多选的下拉框进行条件查询. 首先将该下拉框的值在后台获取后封装进一个String数组中,如; params.put("syst ...

  3. oracle数据库 交集,Oracle两个逗号分割的字符串,获取交集、差集(sql实现过程解析)...

    Oracle数据库的两个字段值为逗号分割的字符串,例如:字段A值为"1,2,3,5",字段B为"2". 想获取两个字段的交集(相同值)2,获取两个字段的差集(差 ...

  4. oracle表中增加字段 sql语句,ORACLE中通过SQL语句(alter table)来增加、删除、修改字段...

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  5. oracle实现将字段按逗号拼接/按逗号分为多行

    oracle实现将字段按逗号拼接/按逗号分行 一.拼接 1.普通拼接 2.进阶:限制拼接个数并去重 3.进阶:拼接除去当前值的其他值 4.函数说明 LISTAGG 二.分行 1.普通分行方法1 2.进 ...

  6. SQL将查询结果合并到一个字段中并使用,分割,不使用GROUP_CONCAT和FOR XML PATH(‘‘)与存储过程

    需求背景: 项目中使用一个字段保存了外键信息,多个外键用[,](逗号)分割,在进行查询的时候需要将这些关联的外键相关字段查询出来. 如我有一个班级表,表中保存了班级班主任信息,班主任可以是多个人,多个 ...

  7. oracle判断字段为空时选用别的字段_oracle中使用sql查询时字段为空则赋值默认

    转至:http://www.th7.cn/db/Oracle/201501/86125.shtml oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 oracle 函数介绍之nvl ...

  8. sql拼接同一字段中的数据_用SQL将Oracle中同一列的多行记录拼接成一个字符

    用SQL将Oracle中同一列的多行记录拼接成一个字符串 用SQL将Oracle中同一列的多行记录拼接成一个字符串 [sql] -- 原始数据 -- a   111 -- b   222 -- a   ...

  9. oracle字段长度大于3的值,sql语句查询字段长度大于6

    sql语句怎么在一个数据库中查找拥有同一字段名的所有表 1.在Oracle中,这样写就可以解决了select column_name,table_name from user_tab_columns ...

  10. Oracle SQL篇(三)Oracle ROWNUM 与TOP N分析

        首先我们来看一下ROWNUM: 含义解释: 1.rownum是oracle为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推.这是一个伪列,可以用于限制查询返回的总行数. 2 ...

最新文章

  1. Linux命令学习总结:hexdump
  2. java 冒泡排序和快速排序 实现
  3. IPython基础使用_Round2
  4. 自定义服务器控件ImageButton
  5. python 第三方库
  6. 快速了解Bagging算法
  7. 看完源码记不住,是我记性太差了吗?
  8. linux 如何自定义安装路径,Linux下安装mysql并自定义数据的存储路径
  9. 技术分享|Javascript高级教程学习指南
  10. OpenCV--二值化
  11. HTTP协议基础及报文抓包分析
  12. python qq协议_利用webqq协议使用python登录qq发消息 | 学步园
  13. (Tekla Structures二次开发)将报表模板数据写入文本文件
  14. 程序员必备的11个辅助开发的软件神器
  15. 注册百度地图开发者账户创建
  16. 软件测试员的日常逗逼瞬间
  17. 图数据库 Dgraph 学习笔记
  18. DDP及其在pytorch中应用
  19. 东方通中间件 - TongWeb 初级
  20. 描述流体中声学物理现象的三个基本方程

热门文章

  1. Ubuntu、ros快速安装
  2. mac-os big sur -brew安装jq缺少文件
  3. 眼下精准吸引上万的粉丝课程,海风通过豆瓣被动引流思路
  4. 【开源教程2】疯壳·开源编队无人机-硬件资源简介
  5. int数组java,java定义int数组
  6. 数学建模更新7(ARCH和GARCH模型)
  7. AES16位密钥加密解密
  8. linux文件怎么打包压缩文件,linux文件怎么打包、压缩和解压?详细教程来了!...
  9. 计算机专业新手小白学编程如何选择笔记本电脑
  10. java 中文词性标注_使用opennlp进行词性标注