問題原因:
由於資料庫中某個字段含有大量資料由逗號開(且多列,逗號個數不固定)
解決辦法:
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...