oracle資料庫 單行字段分隔符 專列 in查詢

2021-10-23 13:31:27 字數 979 閱讀 9408

問題描述:在資料庫表關係中,可能會遇到,a表中的b欄位儲存了b表id;由於a表與b表是一對多的關係,所以為了方便,a表b欄位儲存b表多個id,並以逗號(,)等字元分隔。

如果關聯查詢a中對應b表的內容行,一般會用select * from b id in(…);但是由於1中描述的問題,b id不能直接in,需要將a表b欄位進行轉換,即單行資料轉多行資料,以適用於in的查詢語法。

解決語法:基本語法:

select regexp_substr ('1,2,3', '[^,]+', 1,rownum)

from dual connect by rownum<=length ('1,2,3') - length (regexp_replace('1,2,3', ',', ''))+1;

select selectitem_nm,matter_id from fwjc_matter_selectitem where matter_id in (

select regexp_substr ((matter_id), '[^,]+', 1,rownum) from

(select matter_id from fwjc_evaluate_project where project_id=#para(projectid) and project_std = '1'

and end_date between #para(starttime) and

#para(endtime)

and begin_date between #para(starttime) and

#para(endtime)

and update_user=#para(usercode))

connect by rownum<=length (matter_id)- length (regexp_replace(matter_id, ',', ''))+1

)

oracle資料庫欄位中含有逗號分隔的字串轉列

select distinct regexp substr 欄位名,1,level from 表名 connect by regexp substr 欄位名,1,level is not null 注意 如果欄位中有重複值則會查出null資料,需要在外層處理 例如 表 sys flow sp use...

Oracle資料庫的單行函式

單行函式的常用方法例項展示 1 字元函式 查詢所有員工的姓名,以小寫,大寫,首字母大寫的方式顯示 select ename from emp lower 小寫 upper 大寫 initcap 首字母大寫 select ename,lower ename upper ename initcap en...

oracle 資料庫常見的單行函式

單行函式 作用於一行,返回乙個值 字元函式 dual 虛表沒有實際意義 小寫變大寫 select upper yes from dual 大寫變小寫 select lower yes from dual 數值函式 四捨五入函式,後面的引數表示保留幾位小數 select round 26.16,1 f...