ORACLE拆分逗號隔開的某個字段的值
在使用ORACLE查詢時,咱們常常會用到某個字段存的值是逗號分割開的,然而在查詢時候須要將這個字段的值進行分開顯示:
REGEXP_SUBSTR函數格式以下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :須要進行正則處理的字符串
__pattern :進行匹配的正則表達式
__position :起始位置,從第幾個字符開始正則表達式匹配(默認爲1)
__occurrence :標識第幾個匹配組,默認爲1
__modifier :模式('i’不區分大小寫進行檢索;‘c’區分大小寫進行檢索。默認爲’c’。)
舉例
如今有一張表名叫TB_JH_TEST,存以下字段:
WID TYPE NAME PRICE
70144C876FBDCE98E050007F01006964 2,4 測試1 5
72707CB34C36E467E050007F01006202 1,2,4 測試2 12
70D9E23382CD8074E050007F01005D5A 1,5 測試3 234
如今咱們將wid=72707CB34C36E467E050007F01006202的這條數據的TYPE字段拆分,oracle語句以下:
select
WID, //須要查詢表中的的字段,惟一主鍵
"NAME",//須要查詢表中的的字段
regexp_substr(TYPE, '[^,]+', 1, level) TYPE,//須要拆分的字段,直接把TYPE換成你要拆分的那個字段便可
PRICE//須要查詢表中的的字段
from
TB_JH_TEST //表名
where
WID='72707CB34C36E467E050007F01006202'//你若是有條件,在此處加上便可,沒有的話去掉就是拆分全部的
connect by level <= regexp_count(TYPE, ',') + 1 //須要拆分的字段,直接把TYPE換成你要拆分的那個字段便可
and WID = prior WID//須要查詢表中的的字段,惟一主鍵,把WID換成你表中的惟一主鍵便可,其餘不變
and prior dbms_random.value is not null//這句話照抄,不要改
###執行結果
正則表達式