oracle sql将一个varchar型的数据转成多行结果记录

今天在做一个报表的时候,想用一个sql查询最后结果,但在实现的时候遇到一点问题,我查到的一个字段是varchar型的,多个id的组合(如:1,2,3,并且这个结果是一个selete语句实现的),但是我要在另一个表中查询使用这个id,而这个id是int型的。所以,没办法直接使用这个结果,总会报错说无效的number类型。后面同事帮忙查到一个方法可以把这个结果转成对应的行的记录。

 

例:我查询的这个字段结果为3,4.

 

select replace(appr_or_reasons,'|',''',''')  from equ_odr_trade_ovr_request where id = 21748;

 

如下语句可以将这个值转成:

3

4

 

with temp as

(select '3,4' text from dual)

select regexp_substr(text,'[0-9]+',1,rn) text from temp t1,

(select level rn from dual connect by rownum <= (select length(text)-length(replace(text,',',''))+1 from temp)) t2

最后我便可以直接将上面语句放到in子句中。便可以查到数据

 select cor.credit_or_reason
  from sds_credit_or_reason  cor
  where id in(
   with temp as
(select (select replace(appr_or_reasons,'|',''',''')  from equ_odr_trade_ovr_request where id = 21748) id from dual)
select regexp_substr(id,'[0-9]+',1,rn) id from temp t1,
(select level rn from dual connect by rownum <= (select length(id)-length(replace(id,',',''))+1 from temp)) t2
  );
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值