1. 程式人生 > >oracle 拆分逗號分隔字串 實現split

oracle 拆分逗號分隔字串 實現split

如果一個字串中有像逗號或其它符號分隔,你想把它折分成列,如’first field, second field , third field’,

拆成

first field

second field

third field

第一種 用10G開始支援的正則表示式

SELECT REGEXP_SUBSTR (‘first field, second field , third field’, ‘[^,]+’, 1,rownum)
FROM DUAL
CONNECT BY ROWNUM <=
LENGTH (‘first field, second field , third field’) – LENGTH (REPLACE (‘first field, second field , third field’, ‘,’, ”))
+1

————

first field
second field
third field

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’,’,’))

擴充套件 regexp_replace

V欄位中每個值中字串以,分隔,如果不是以9開頭那組串加‘00’

[email protected]>create table testreg(v varchar2(80));
Table created.
[email protected]>insert into testreg values(’911,000,12,31′);
1 row created.

[email protected]>insert into testreg values(’11911,554000,312,931′);
1 row created.

[email protected]>commit;
Commit complete.

[email protected]>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

相關推薦

oracle拆分逗號分隔字串 實現split

 如果一個字串中有像逗號或其它符號分隔,你想把它折分成列,如’first field, second field , third field’, 拆成 first field second field third field 第一種 用10G開始支援的正則表示式

oracle 拆分逗號分隔字串 實現split

如果一個字串中有像逗號或其它符號分隔,你想把它折分成列,如’first field, second field , third field’, 拆成 first field second field third field 第一種 用10G開始支援的正則表示式 SELECT REGEXP_SUBSTR (‘

ORACLE逗號分隔字串的應用

  【問題】遇到逗號分隔的字串轉為巢狀表, 如果採用自定義的方法,需要寫個迴圈,比較麻煩 【分析】 ORACLE提供了類似的過程來實現這個功能 dbms_utility.comma_to_table( list   IN  VARCHAR2, tablen OUT

Python分隔字串re.splitsplit函式

split:多個分隔符 單一分隔符,使用str.split()即可  re.split:多個分隔符,複雜的分隔情況(用|隔開) 單一分隔符,str.split()與 re.split()效果是一樣的 多個單一 分隔符 時 ,”[]”與 “|”的 效果是一樣的,但是 請注意 使

.NET List 轉成逗號分隔字串

       今天分享一個.NET的小技巧,有時候我們在編寫程式的時候,需要把List中的資料轉換成一個用逗號分隔的字串,例如有這樣一個list: List<string> list = new List<string>(); li

myBatis通過逗號分隔字串,foreach

前言     當資料庫裡儲存的值是以逗號分隔格式儲存的字串時。 資料格式如下:  id name  ids   1  張三

java8新特性之逗號分隔字串轉List

業務背景: 某個資料庫欄位,儲存的是逗號分隔的id,可能是Integer也可能是Long型的,比如:1,2,3等;需要轉換成Long型的List或者Integer型的List,怎麼做更簡便?? 見程式碼: String ids= "1,2,3,4,5,6";

mysql逗號分隔字串成多行資料

最近迷上將夜,就用主角做栗子了。 轉換後: SQL程式碼 select substring_index(substring_index(a.userIds,',',b.help_topic_id+1),',',-1) id, substring_index(substring_i

java8新特性之逗號分隔字串轉List

業務背景: 某個資料庫欄位,儲存的是逗號分隔的id,可能是Integer也可能是Long型的,比如:1,2,3等;需要轉換成Long型的List或者Integer型的List,怎麼做更簡便?? 見程式碼: //You can use the Lambda function

Python中使用多個分隔符分隔字串re.split

摘要 split多個分隔符 單一分隔符,使用str.split()即可 多個分隔符,複雜的分隔情況,使用re.split 單一分隔符,str.split()與 re.split()效果是一樣的 多個單一 分隔符 時 ,”[]”與 “|”的 效果是一樣的,但是 請注

表中欄位為逗號分隔的數字,去資料字典中查詢返回逗號分隔字串的方法

SELECTgroup_concat(`ty`.`INFORMATION_TYPE_NAME` SEPARATOR ',')FROM(`BAS_INFORMATION_TYPE` `ty`LEFT JOIN `BAS_USER_CRAFTSMAN` `f` ON (find

SqlSerVer 列與逗號分隔字串 互相轉換

在專案中,使用SQLServer資料庫,有一個需求,需要將資料庫的某一列,轉換成逗號分隔的字串。同時,需要將處理完的字串,轉換成為一列。 經過查閱資料與學習,通過以下方式可以實現如上所述需求: 1、編

oracle如何拆分逗號分隔字串為多列?

最近遇到一個問題,需要把一個帶有,的字串拆分成多列。通過查詢資料,這個操作需要使用以下2個關鍵知識: 1. REGEXP_SUBSTR函式 這個函式的作用是正則分隔字串,用法為 function REGEXP_SUBSTR(String, pattern, position, occ

Oracle SQL符號分隔的多行字串拆分

之前寫了一篇文章,http://blog.csdn.net/seandba/article/details/72644257 討論了從單行字串拆分到多行字串拆分,最後的解決不算圓滿。 從一個比較簡單的問題出發的,需求如下: 將源表的name列的字串拆分成一個個字元,不使用u

需求:MYSQL表中一個欄位用逗號分隔,需要查出來split拆分並依次存入另一個表的一個欄位中

 需求:表中一個欄位用逗號分隔,需要查出來split拆分並依次存入另一個表的一個欄位中 假設問題是這丫那個的,table1中id=2的name值為'xiaoming,xiaohua,xiaowang,xiaohui',我們要取出這個name欄位值,並且根據逗號拆分出來,

oracle 資料庫中某個欄位逗號分隔,得到對應列中的個數(列轉行)實現方法

由於各種原因,資料的原則問題,導致某個欄位上出現多個數據(依據分隔符隔開),比如 name 欄位為 張三;李四;王五等等 需求:求一張表中name欄位中出現的個數; 想要得到的結果為: 對

oracle管道流函式,字串按照逗號分隔,函式中迴圈

1.定義物件類 CREATE OR REPLACE TYPE "FUNC_GDT_QUERY" IS object ( totalRMB NUMBER(14, 2), agenc

oracle 逗號分隔欄位拆分,記錄下

拆分前資料: 拆分指令碼: select or_pid, regexp_substr(or_rule_id, '[^,]+', 1, level) or_rule_id from x_265_gd_644746 connect by level <

oracle 字串裡面有通過逗號分隔的各個id,直接通過字串獲取id對應的name的字串

student表的courses欄位,存著course的id,現在需要學生的所有課程用字串的形式查出student表idnamecourses1小明    44,55,662小紅113小紫22,44co

字串"a,b,c"以逗號分隔轉換為陣列並列印

主要利用了String的split方法。 package com.dylan.test; /** * @author xusucheng * @create 2017-12-22 **/ public class Test { public static void