儲存在這裡,方便自己以後檢視 (⊙_⊙) ╮(╯▽╰)╭
-- 建立需要劃分的字串
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...