Oracle 字段值按逗號拆分,變為多行資料

2021-10-02 19:08:39 字數 1205 閱讀 1209

問題原因:

由於資料庫中某個字段含有大量資料由逗號開(且多列,逗號個數不固定)

解決辦法:

select distinct * from (

select regexp_substr(q.nums, '[^,]+', 1, level,'i') order_num, names

from (

select '1,2,3' nums, '張三' names from dual

union all

select '4,5' nums, '李四' names from dual

union all

select '5,6' nums, '王五' names from dual

) qconnect by level <= length(q.nums) - length(regexp_replace(q.nums, ',', '')) + 1) order by order_num;

重點內容:

regexp_substr函式格式如下:

function regexp_substr(string, pattern, position, occurrence, modifier)

srcstr :需要進行正則處理的字串

pattern :進行匹配的正規表示式

position :起始位置,從第幾個字元開始正規表示式匹配(預設為1)

occurrence :標識第幾個匹配組,預設為1

modifier :模式('i'不區分大小寫進行檢索;'c'區分大小寫進行檢索。預設為'c'。)

connect by 用法

oracle中的select語句可以用start with ... connect by prior ...子句實現遞迴查詢,connect by 是結構化查詢中用到的,其基本語法是:

select ... from

where 《過濾條件,用於對返回的所有記錄進行過濾》

start with 《根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹》

connect by [prior] 《連線條件,其中用prior表示上一條記錄,比如:connect by prior t.id = t.parent_id就是說上一條記錄的id 是本條記錄的parent_id,即本記錄的父親是上一條記錄》

ORACLE 表中字段根據逗號拆分多行

這個函式的作用是正則分隔字串,用法為 function regexp substr string,pattern,position,occurrence,modifier srcstr 需要進行正則處理的字串 pattern 進行匹配的正規表示式 position 起始位置,從第幾個字元開始正規表示...

Oracle欄位根據逗號分割查詢資料

需求是表裡的某個字段儲存的值是以逗號分隔開來的,要求根據分隔的每乙個值都能查出來資料,但是不能使用like查詢。資料是這樣的 查詢的sql如下 select from select guid,regexp substr st responsible,1,level responsible from ...

oracle拆分某個字段

表 uf wzlb 物資類別 表 uf wzzl 物資種類 表 uf wzlb wzzl 物資類別和物資種類關聯表,物資類別與物資種類為一對多關係 如,物資類別編碼為 wzlb 201805100004 該物資類別繫結了多個物資種類,繫結的物資種類編碼為 wzzl 201805100044,wzzl...