ORACLE拆分逗號隔開的某個字段的值
引用地址 https://blog.csdn.net/qq_26641273/article/details/81779371
在使用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//這句話照抄,不要改