Oracle 實現拆分列資料的split 方法

2021-08-31 10:40:46 字數 1712 閱讀 4840

儲存在這裡,方便自己以後檢視 (⊙_⊙) ╮(╯▽╰)╭

-- 建立需要劃分的字串

with t1 as(

select 'one,two,three,four,five,six,seven,eight,nine,zero' as source_string

from dual),

-- 統計字串中子串的個數,用 ',' 來劃分子串

t2 as(

select regexp_count(source_string, '[^,]+') as source_substring_count

from t1),

-- 根據子串的個數建立索引列,用於給t4的regexp_substr()方法索引

t3 as(

select rownum as row_number

from dual, t2

connect by rownum <= t2.source_substring_count),

-- 根據每個索引值逐個擷取字串

t4 as(

select t3.row_number as substring_index,

regexp_substr(t1.source_string, '[^,]+', 1, t3.row_number) as substring

from t1, t3)

select substring_index, substring from t4;

鑑於 regexp_count() 方法是 oracle 11g 才新加上的,之前的版本並沒有,這裡再用另一種方法來統計子串的個數:

-- 建立需要劃分的字串

with t1 as(

select 'one,two,three,four,five,six,seven,eight,nine,zero' as source_string

from dual),

-- 統計字串中子串的個數

-- 字串中','字元用''代替後,其減少的長度自然就是原串中','字元的個數

t2 as(

select length(t1.source_string) - length(replace(t1.source_string, ',', '')) + 1

as source_substring_count

from t1),

-- 根據子串的個數建立索引列,用於給t4的regexp_substr()方法索引

t3 as(

select rownum as row_number

from dual, t2

connect by rownum <= t2.source_substring_count),

-- 根據每個索引值逐個擷取字串

t4 as(

select t3.row_number as substring_index,

regexp_substr(t1.source_string, '[^,]+', 1, t3.row_number) as substring

from t1, t3)

select substring_index, substring from t4;

執行結果:

分列 將excel單元格的內容拆分為兩列

提要 處理excel資料時有時需要把單元格的內容拆分為兩列,可能方便外部軟體的鏈結,可能使資料顯示更明晰等等,有人說直接剪下加貼上不就可以了嗎,但是有時資料過多,這樣處理很不效率,網上搜尋的方法說插入某某函式可以實現,但是可能顯得比較複雜,其實excel軟體本身就帶有 分列 的功能。舉例 如exce...

oracle資料庫實現行轉列和列轉行的Sql語句

oracle資料庫實現行轉列和列轉行的sql語句,知道的不知道的,大家一塊來重溫一下吧!列轉行create table test name char 10 km char 10 cj int insert test values 張三 語文 80 insert test values 張三 數學 8...

oracle的拆分組合查詢

表 msg content 表 msg contact person 想要得到的效果 要點分析 結果表和表1不同的地方是receiver欄位加入了表2的真實姓名 實現方式 第一步 拆分表1的字段 select c.msg content id as contentid,regexp substr r...