分隔字串實現列轉行

junsansi發表於2008-10-31
字串如下:004-007號,004-006號,10188,10239,004-005號,010-003號,010-002號,030-001號,030-002號,006號,008-003號,054-001號,038,012,170-002號,181-001號,181-002號,175-003號,008-008號,175-006號,170-006號,170-005號,175-001號

求結果集如下:
ID        VALUE
1        004-007號
2        004-006號
3        10188
4        10239
5        004-005號
6        010-003號
7        010-002號
8        030-001號
9        030-002號
10        006號
11        008-003號
12        054-001號
13        038
14        012
15        170-002號
16        181-001號
17        181-002號
18        175-003號
19        008-008號
20        175-006號
21        170-006號
22        170-005號
23        175-001號

兩種快捷的實現方式如下:

1、藉助系統函式
[php]
SQL> select rownum id, column_value value from table(sys.odcivarchar2list('004-007號','004-006號','10188','10239','004-005號','010-003號','010-002號','030-001號','030-002號','006號','008-003號','054-001號','038','012','170-002號','181-001號','181-002號','175-003號','008-008號','175-006號','170-006號','170-005號','175-001號'));

        ID VALUE
---------- ------------------------------
         1 004-007號
         2 004-006號
         3 10188
         4 10239
         5 004-005號
         6 010-003號
         7 010-002號
         8 030-001號
         9 030-002號
        10 006號
        11 008-003號
        12 054-001號
        13 038
        14 012
        15 170-002號
        16 181-001號
        17 181-002號
        18 175-003號
        19 008-008號
        20 175-006號
        21 170-006號
        22 170-005號
        23 175-001號

23 rows selected.
--
[/php]

2、藉助正規表示式
[php]
SQL> select rownum rn,TRIM(REGEXP_SUBSTR('004-007號,004-006號,10188,10239,004-005號,010-003號,010-002號,030-001號,030-002號,006號,008-003號,054-001號,038,012,170-002號,181-001號,181-002號,175-003號,008-008號,175-006號,170-006號,170-005號,175-001號', '[^,]+', 1, level)) value from dual
  2   connect by level <= length(regexp_replace('004-007號,004-006號,10188,10239,004-005號,010-003號,010-002號,030-001號,030-002號,006號,008-003號,054-001號,038,012,170-002號,181-001號,181-002號,175-003號,008-008號,175-006號,170-006號,170-005號,175-001號','[^,]*'))+1;

        RN VALUE
---------- ------------------------------
         1 004-007號
         2 004-006號
         3 10188
         4 10239
         5 004-005號
         6 010-003號
         7 010-002號
         8 030-001號
         9 030-002號
        10 006號
        11 008-003號
        12 054-001號
        13 038
        14 012
        15 170-002號
        16 181-001號
        17 181-002號
        18 175-003號
        19 008-008號
        20 175-006號
        21 170-006號
        22 170-005號
        23 175-001號

23 rows selected.
--
[/php]

注:上述方式均需在10g以上版本中執行。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-483605/,如需轉載,請註明出處,否則將追究法律責任。

相關文章