zoukankan      html  css  js  c++  java
  • Oracle 10g 使用REGEXP_SUBSTR 分拆字符串 (转)

    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;

  • 相关阅读:
    09 图书管理系统(SSM+LayUi)
    06 图书管理系统(SSM+LayUi)
    05 图书管理系统(SSM+LayUi)
    04 图书管理系统(SSM+LayUi)
    在使用IDEA创建SpringBoot的时候出现了Initialization failed for 'https://start.spring.io’Please check URL, network and proxy settings.的错误
    给项目添加Tomcat时找不到项目
    11 图书管理系统(SSM+LayUi)
    SNE降维与可视化
    非线性模型的回归和分类问题——决策树
    从线性回归到逻辑回归
  • 原文地址:https://www.cnblogs.com/toowang/p/6649917.html
Copyright © 2011-2022 走看看