Oracle 10g 使用REGEXP_SUBSTR 分拆字串

來源:互聯網
上載者:User

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;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.