oracle账号密码文件oracle sql将一个varchar型的数据转成多行结果记录

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

 

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

   www.2cto.com  

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

 

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

   www.2cto.com  

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

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 fromoracle账号 temp t1,

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

  );

 

此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。