oracle拆分逗號分隔字串 實現split
如果一個字串中有像逗號或其它符號分隔,你想把它折分成列,如’first field, second field , third field’,
拆成
first field
second field
third field
第一種 用10G開始支援的正規表示式
anbob@ANBOB>SELECT REGEXP_SUBSTR ('first field, second field , third field', '[^,]+', 1,rownum) 2 FROM DUAL 3 CONNECT BY ROWNUM <= 4 LENGTH ('first field, second field , third field') - LENGTH (REPLACE ('first field, second field , third field', ',', ''))+1; REGEXP_SUBSTR('FIRSTFIELD,SECONDFIELD,THIRDFIELD','[^,]+',1,ROWNUM) ------------------------------------------------------------------------------ first field second field third field
TIP:
REGEXP_SUBSTR 函式是把那個串以正則不是以,(逗號)開頭的擷取,第二個引數是取第幾組,rownum偽列序號,connect 迴圈 ,迴圈次數為串總長度-去除分隔符後=幾個分隔符 +1
第二種用type,function
第一,先建立一個Type
CREATE OR REPLACE TYPE type_split IS TABLE OF VARCHAR2 (4000)
第二,建立函式
create or replace function split(p_list varchar2,p_sep varchar2 := ’,’) return type_split pipelined IS l_idx pls_integer; v_list varchar2(50) := p_list; begin loop l_idx := instr(v_list,p_sep); if l_idx = 0 then pipe row(substr(v_list,1,l_idx-1)); v_list := substr(v_list,l_idx+length(p_sep)); else pipe row(v_list); exit; end if; end loop; end split;
第三,除錯
select * from table(split(‘aaa,bbb,ccc’,',’));
拆分列欄位
anbob@ANBOB>select * from test11; ID NAME -------------------- ---------- 1 a,b,c 2 e,d nbob@ANBOB>with temp0 as (select LEVEL lv from dual CONNECT BY LEVEL <= 100) 2 select id,substr(t.vals,instr(t.vals, ',', 1, tv.lv) + 1, 3 instr(t.vals, ',', 1, tv.lv + 1) -( 4 instr(t.vals, ',', 1, tv.lv) + 1) 5 ) AS name 6 from (select id,',' || name || ',' AS vals, 7 length(name || ',') - nvl(length(REPLACE(name, ',')), 0) AS cnt 8 from test11) t join temp0 tv 9 on tv.lv <= t.cnt order by 1; ID NAME -------------------- ------------------------ 1 a 1 b 1 c 2 d 2 e
擴充套件 regexp_replace
V欄位中每個值中字串以,分隔,如果不是以9開頭那組串加‘00’
anbob@NCME>create table testreg(v varchar2(80));
Table created.
anbob@NCME>insert into testreg values(’911,000,12,31′);
1 row created.
anbob@NCME>insert into testreg values(’11911,554000,312,931′);
1 row created.
anbob@NCME>commit;
Commit complete.
anbob@NCME>select ltrim(regexp_replace(‘,’||v,’([,])’,'\100′),’,') newv,v from testreg;
NEWV V
—————————— ——————————
00911,00000,0012,0031 911,000,12,31
0011911,00554000,00312,00931 11911,554000,312,931
我的原連結在 http://www.anbob.com/archives/221.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23368118/viewspace-1074252/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle拆分逗號分隔字串 - REGEXP_SUBSTROracle字串
- Oracle以逗號分隔的字串拆分為多行資料Oracle字串
- jq用逗號分隔字串字串
- 將List元素拼裝成逗號分隔的字串字串
- 轉貼_字串分隔_拆分字串
- 陣列拆分成單引號逗號隔開的字串陣列字串
- oracle plsql之如何把以逗號,分隔的字串分割成多個子字元OracleSQL字串字元
- 逗號分隔,輸出陣列陣列
- java——split的用法(字串拆分)Java字串
- SqlServer中字串拆分仿造split功能SQLServer字串
- sqlserver字串拆分(split)方法彙總SQLServer字串
- 正規表示式實現的千分位加逗號分隔效果
- iOS+以逗號分隔大資料iOS大資料
- Java 中將列表轉換為字串,並使用逗號分隔其中的元素Java字串
- Oracle自定義函式---按照某個分隔符拆分字串Oracle函式字串
- 拆分含有多種分隔符的字串字串
- 將List中的資料組成用逗號分隔的字串,如'a','b','c'字串
- split 分割 字串(分隔符如:* ^ : | , .) 及注意點字串
- 分隔字串實現列轉行字串
- MySQL 查詢表所有列名,並用逗號分隔MySql
- 將EXCEL裡的電話號碼用逗號分隔匯出Excel
- PHP刪除字串中的逗號PHP字串
- Oracle vs PostgreSQL DBA(13)- 拆分(split)分割槽OracleSQL
- mysql 如何查詢逗號“,”分割的字串MySql字串
- JavaScript刪除字串中最後的逗號JavaScript字串
- Linux split拆分檔案Linux
- 【專案實戰】---統計逗號隔開的字串的數量字串
- delphi 中分隔符分隔的字串字串
- 表的欄位名轉為逗號相隔的字串字串
- 利用SQL的charindex實現字串陣列和Split函式SQLIndex字串陣列函式
- Sql字串分組Split函式的兩種實現方法SQL字串函式
- 檔案拆分命令 split 使用簡介
- 【記錄】sqlserver列轉行查詢 並將查詢結果用逗號分隔開SQLServer
- JavaScript 逗號(,)用法JavaScript
- JavaScript 逗號用法JavaScript
- fun_get_split_str 取得一個字串,按照特定字元分隔的,特定位置的值.字串字元
- 「javaScript-每三位插入一個逗號實現方式」JavaScript
- javascript實現的每三位數字使用逗號分割JavaScript