91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle數據行拆分多行的示例分析

發布時間:2021-07-29 11:34:06 來源:億速云 閱讀:155 作者:小新 欄目:數據庫

小編給大家分享一下Oracle數據行拆分多行的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

單行拆分

如果表數據只有一行,則可以直接在原表上直接使用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數據行拆分多行的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

本溪| 北海市| 和田县| 手游| 商洛市| SHOW| 襄城县| 抚远县| 宜黄县| 抚顺县| 和龙市| 永靖县| 竹山县| 兴仁县| 蛟河市| 读书| 漾濞| 松潘县| 南安市| 东莞市| 新乡市| 永平县| 黄陵县| 马龙县| 丰都县| 五河县| 兴城市| 文安县| 碌曲县| 平果县| 九台市| 亚东县| 哈尔滨市| 象山县| 错那县| 民乐县| 乃东县| 东辽县| 朔州市| 札达县| 清徐县|