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. zepto.js移动端城市选择插件

    http://sc.chinaz.com/jiaoben/170327301850.htm

  2. [CQOI2015]网络吞吐量

    Description: 给你一个图,每个点可以被经过\(a_i\)次,求有多少个人可以走最短路到n点 Hint: \(n \le 500\) Solution: 极其水的一道题,就当做复习最短路板子 ...

  3. Ubuntu安装并使用sogou输入法

    1.下载搜狗输入法的安装包 下载地址为:http://pinyin.sogou.com/linux/ ,如下图,要选择与自己系统位数一致的安装包,我的系统是64位,所以我下载64位的安装包 2.按键C ...

  4. XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Korea

    A. Donut 扫描线+线段树. #include<cstdio> #include<algorithm> using namespace std; typedef long ...

  5. __x__(17)0906第三天__块元素block_内联元素inline_行内块元素inline-block

    1. 块元素block 独占一行的元素 一般使用块元素包含内联元素,用作页面布局 <a> 标签可以包含任何除了a标签以外的元素 <p> 标签不能包含块元素 h1... ...h ...

  6. File类中的一些属性 添加删除文件夹

    import java.io.File; import java.io.IOException; public class FileD { public static void main(String ...

  7. 黑盒测试实践——day04

    一.任务进展情况 通过昨天的选择和搜集资料,目前已成功安装好了testWriter,目前正在选择合适的web系统,进行测试. 二.存在的问题 安装TestWriter之前,需要安装SQLServre2 ...

  8. Handler Bundle Runnable

    Handler:   不能在子线程更新UI,可以通过handler来实现在子线程发送消息在主线程更新 Bundle:      https://blog.csdn.net/qq_36895346/ar ...

  9. ARM_DMA学习

    AMBA: advanced(高级) microcontroller bus architecture; 利用多层总线系统减少DMA传输和CPU中断的延迟: DMA流或DMA通道,流优先级,Adres ...

  10. SQL2005EXPress自动备份

    STEP1:在数据库服务器的master表中创建存储过程sp_BackupDatabase 代码如下 USE [master] GO /****** 对象: StoredProcedure [dbo] ...