把一個字串變成多筆資料

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

 

如:

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值