婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Oracle數據行拆分多行方法示例

Oracle數據行拆分多行方法示例

熱門標簽:呼倫貝爾智能手機地圖標注 南寧人工智能電銷機器人費用 海南400電話哪里辦理 圖像地圖標注 濟南地圖標注公司 貴陽電話外呼系統哪家好 分布式呼叫中心 安陽外呼系統免費 400電話是不是免費申請

工作和學習中常常會遇到一行要分割成多行數據的情況,在此整理一下做下對比。

單行拆分

如果表數據只有一行,則可以直接在原表上直接使用connect by+正則的方法,比如:

select regexp_substr('444.555.666', '[^.]+', 1, level) col
from dual
connect by level = regexp_count('444.555.666', '\.') + 1 

輸出結果:

COL
----
444
555
666

多行拆分

如果數據表存在多行數據需要拆分,也可以在原表上使用connect+正則的方法:

方法一

with t as
(select '111.222.333' col
from dual
union all
select '444.555.666' col
from dual)
select regexp_substr(col, '[^.]+', 1, level)
from t
connect by level = regexp_count(col, '\.\') + 1
and col = prior col
and prior dbms_random.value > 0

結果:

---------
111
222
333
444
555
666

方法二

使用構造的最大行數值關聯原表:

with t as
(select '111.222.333' col
from dual
union all
select '444.555.666' col
from dual)
select regexp_substr(col, '[^.]+', 1, lv)
from t, (select level lv from dual connect by level  10) b
where b.lv = regexp_count(t.col, '.') + 1 

這種方法設置第二個數據集的時候要小于可能的最大值,然后兩數據集做關聯,在做大數據量拆分的時候,這個數值設置得當,拆分行數相對一致的情況下,效率比方法一直接connect by要高。

方法三

使用table函數:

with t as
(select '111.222.333' col
from dual
union all
select '444.555.666' col
from dual)
select column_value
from t,
table(cast(multiset
(select regexp_substr(col, '[^.]+', 1, level) dd
from dual
connect by level = regexp_count(t.col, '\.\') + 1) as
sys.odcivarchar2list)) a 

結果:

COLUMN_VALUE
-------------
111
222
333
444
555
666

這個方法輸出的列名是固定的,column_value依賴于sys.odcivarchar2list這個類型的輸出,該方法對于大數據量的拆分效率比第二個方法好。

方法四

with t as
(select '111.222.333' col
from dual
union all
select '444.555.666' col
from dual)
select regexp_substr(col, '[^.]+', 1, trim(column_value))
from t,
xmltable(concat('1 to ',regexp_count(t.col, '.') + 1)) a ;

注意:大數據量的拆分時,謹慎使用正則的方法去做,可以使用substr+instr的方式替換正則。

如果以上方法的效率仍然不理想,可考慮使用plsql塊。

總結

以上就是本文關于Oracle數據行拆分多行方法示例的全部內容,希望對大家有所幫助。感興趣的朋友可以參閱:PLSQL Developer登錄的默認密碼介紹、ORACLE SQL語句優化技術要點解析、淺談oracle rac和分布式數據庫的區別、oracle 數據庫啟動階段分析等。有什么問題可以隨時留言,歡迎大家交流討論。

您可能感興趣的文章:
  • Oracle以逗號分隔的字符串拆分為多行數據實例詳解

標簽:焦作 滁州 涼山 郴州 合肥 遼源 許昌 南充

巨人網絡通訊聲明:本文標題《Oracle數據行拆分多行方法示例》,本文關鍵詞  Oracle,數據,行拆,分多,行,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Oracle數據行拆分多行方法示例》相關的同類信息!
  • 本頁收集關于Oracle數據行拆分多行方法示例的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 达孜县| 嘉禾县| 沂水县| 长白| 通海县| 天水市| 花垣县| 南部县| 右玉县| 安乡县| 盐山县| 湖南省| 错那县| 溆浦县| 清徐县| 揭西县| 宾阳县| 云林县| 邯郸县| 大关县| 三都| 洪江市| 临桂县| 广灵县| 罗平县| 辰溪县| 桂平市| 兴城市| 玛纳斯县| 泰兴市| 城步| 海南省| 隆化县| 中牟县| 禹城市| 嘉黎县| 兴安盟| 勐海县| 德化县| 金昌市| 西丰县|