把一個字串變成多筆資料

在我們實際的程式開發中,經常會有查詢某個欄位值在幾個選項中是否存在的情況.

 

如:

instr(',張三,李四,王五,老六,',name)>0

 

這樣字符太長可能也會影響性能.實際上我們也可以將這個字串變成一個虛擬表,

然后再將事實資料表與虛擬表關聯即可.

 

如:

select replace(regexp_substr('張三,李四,王五,老六,','.*?,',1,level),',')

from dual
connect by level<=lengthb('張三,李四,王五,老六,')-lengthb(replace('張三,李四,王五,老六,',','));

 

如果結合Oracle 9i以上支持的with語法,進行資料預處理,可能會更佳.

 

with

 t as (

select replace(regexp_substr('張三,李四,王五,老六,','.*?,',1,level),',') as name

from dual
connect by level<=lengthb('張三,李四,王五,老六,')-lengthb(replace('張三,李四,王五,老六,',',')) )

 

select * from table_name where name = t.name

你可能感兴趣的:(oracle,table)