SELECT l_count, REGEXP_SUBSTR('add, daddf, dsdf, asdfa, dsfasd, dsfad','[^,]+',1,l_count) AS NAME
  FROM dual
      ,(SELECT LEVEL l_count FROM DUAL CONNECT BY LEVEL<=100)
WHERE l_count <=LENGTH('add, daddf, dsdf, asdfa, dsfasd, dsfad') - LENGTH(REPLACE('add, daddf, dsdf, asdfa, dsfasd, dsfad',','))+1

查询结果为:
lcount   name
1            add
2            daddf
3            dsdf
4            asdfa
5            dsfasd
6             dsfad

一种奇特的字符串拆分方法

create table t_test (id number, names varchar2(200));

insert into t_test values (1,'a1,a2,a3,a4');
insert into t_test values (2,'b1,b2,b3');
insert into t_test values (3,'c1,c2,c3,c4,c5');

目标输出:

ID NAME
--- ----
  1 a1
  1 a2
  1 a3
  1 a4
  2 b1
  2 b2
  2 b3
  3 c1
  3 c2
  3 c3
  3 c4
  3 c5

常规做法:
SELECT id
      ,REGEXP_SUBSTR(names,'[^,]+',1,l) AS NAME
  FROM t_test
      ,(SELECT LEVEL l FROM DUAL CONNECT BY LEVEL<=100)
WHERE l <=LENGTH(names) - LENGTH(REPLACE(names,','))+1
ORDER BY 1,2;

下面这种写法(从ASKTOM看来的),很奇怪地在T2中可以看到T1的列(如果不用TABLE,CAST,MULTISET就不行), T1和T2两个集合之间没有任何连接条件, 看起来像Correlated Subquery, 但它是写在from的地方:

SELECT id
      ,column_value
  FROM (SELECT id,','||names||',' names FROM t_test) t1     ----- 前后拼上逗号是为了下面定位拆分
      ,TABLE(CAST(MULTISET( SELECT SUBSTR (names            ----- 此处竟然可以看到t1.names
                                          ,INSTR (names, ',', 1, LEVEL  ) + 1
                                          ,INSTR (names, ',', 1, LEVEL+1) - INSTR (names, ',', 1, LEVEL) -1 
                                          ) 
                              FROM DUAL
                            CONNECT BY LEVEL <= LENGTH(names)-LENGTH(REPLACE(names,',',''))-1 
                           )
             AS SYS.ODCIVARCHAR2LIST ) ------ SYS.ODCIVARCHAR2LIST 可以换成任意一个TABLE OF VARCHAR2的嵌套表类型
             ) t2
ORDER BY 1,2;

Oracle 10g 使用REGEXP_SUBSTR 分拆字符串 (转)的更多相关文章

  1. 在论坛中出现的比较难的sql问题:1(字符串分拆+行转列问题 SQL遍历截取字符串)

    原文:在论坛中出现的比较难的sql问题:1(字符串分拆+行转列问题 SQL遍历截取字符串) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方 ...

  2. Winform开发框架中实现多种数据库类型切换以及分拆数据库的支持

    在很多应用系统里面,虽然一般采用一种数据库运行,但是由于各种情况的需要,可能业务系统会部署在不同类型的数据库上,如果开发的系统能够很方便支持多种数据库的切换,那可以为我们减少很多烦恼,同时提高系统的适 ...

  3. [转]oracle 10g数据泵之impdp-同时导入多个文件

    要了解impdp,请先了解导出,我之前作过导出的笔记:oracle 10g数据泵之expdp.这两个笔记也许只对程序员有用,通常用于把正式区的数据导入到测试区,对数据库管理员也许帮助不大,他们使用这些 ...

  4. oracle行转列(连接字符串函数)

    方法一:wmsys.wm_concat(column) 介绍:其函数在Oracle 10g推出,在10g版本中,返回字符串类型,在11g版本中返回clob类型.括号里面的参数是列,而且可以是多个列的集 ...

  5. [转]oracle性能调优之--Oracle 10g AWR 配置

    一.ASH和AWR的故事 1.1 关于ASH 我们都知道,用户在ORACLE数据库中执行操作时,必然要创建相应的连接和会话,其中,所有当前的会话信息都保存在动态性能视图V$SESSION中,通过该视图 ...

  6. RAC 常用维护工具和命令(oracle 10g)

    Oracle 的管理可以通过OEM或者命令行接口. Oracle Clusterware的命令集可以分为以下4种: 节点层:osnodes 网络层:oifcfg 集群层:crsctl, ocrchec ...

  7. 通过SQL Server 2008 访问Oracle 10g

    原文地址:http://www.cnblogs.com/gnielee/archive/2010/09/07/access-oracle-from-sqlserver.html 之前写过一篇关于SQL ...

  8. 安装Oracle 10g RAC是否需要安装HACMP

    实际上无论在哪个操作系统(AIX,HP-UX,Solaris,Linux)上安装Oracle10g RAC都不再需要Vendor Clusterware(IBM的HACMP,HP的Service Gu ...

  9. Oracle 10g RAC TAF

    Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影 ...

随机推荐

  1. 大数据项目之_15_电信客服分析平台_01&02_项目背景+项目架构+项目实现+数据生产+数据采集/消费(存储)

    一.项目背景二.项目架构三.项目实现3.1.数据生产3.1.1.数据结构3.1.2.编写代码3.1.3.打包测试3.2.数据采集/消费(存储)3.2.1.数据采集:采集实时产生的数据到 kafka 集 ...

  2. 潭州课堂25班:Ph201805201 tornado 项目 第八课 增加喜欢功能(课堂笔记)

    tornado 相关说明 新增一个页面,用来做图片收藏, 还要在 account.py 创建一个数据库表,记录用户喜欢的图片,哪些图片用户疯狂传奇 cd 到 项目目录下,执行数据库更新 alembic ...

  3. EasyUI 分页 偶遇 问题

    当 存在大量 重复 数据字段的 时候 entity.AsNoTracking().ToList().Skip((page.pageNumber - 1) * page.rows).Take(page. ...

  4. HTML5_canvas_图片加载_双缓冲_跳帧闪烁问题

    canvas 图片加载 pen.drawImage(ele, showX, showY, imgWidth, imgHeight); ele    将 img 元素 加载到画布上 步骤 1. 创建一个 ...

  5. ECMA Script 6_对象的扩展

    对象 1. ES6 允许直接写入变量和函数,作为对象的属性和方法 const foo = 'bar'; /*****************属性的优化********************/ con ...

  6. laravel5.5+vue+Element-ui+vux环境搭建(webpack+laravelMix)(转)

    本教程例子可到GitHub 上下载 Laravel5.5-Vue-Element-ui-Vux 1.laravel5.5安装,详情请参考: https://laravelacademy.org/pos ...

  7. Java作业二(2017-9-18)

    /*程序员龚猛,求整数各个位上的和*/ import java.util.Scanner; public class Helloworld{ public static void main(Strin ...

  8. IOS不支持iframe的解决办法

    最近做ios的兼容,因为入口不同,需要把公共页面抽取出来,然后根据不同的值,传递给后台不同的入口.刚开始用iframe页面嵌套(第一次尝试使用),但发现iOS系统对iframe嵌套页面的高度和定位控制 ...

  9. 【Java算法學習】斐波那契數列問題-兔子產子經典問題

    /** * 用遞推算法求解斐波那契數列:Fn = Fn-2 +Fn-1; */ import java.util.*; public class Fibonacci { public static v ...

  10. PDF的水印怎么去掉

    很多朋友私下都有问过PDF去除水印的方法,现在在网上下载一些PDF电子书,几乎页面内都会有水印的,而且有的水印还带有超链接,稍微不注意就会点开进入别的页面内,不仅影响了阅读效果还带给读者负面影响,那如 ...