作者:herogan | 来源:互联网 | 2014-07-09 16:02
oraclesql将一个varchar型的数据转成多行结果记录今天在做一个报表的时候,想用一个sql查询最后结果,但在实现的时候遇到一点问题,我查到的一个字段是varchar型的,多个id的组合(如:1,2,3,并且这个结果是一...SyntaxHighlighter.all()
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,&#39;,&#39;,&#39;&#39;))+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,&#39;|&#39;,&#39;&#39;&#39;,&#39;&#39;&#39;) from equ_odr_trade_ovr_request where id = 21748) id from dual)
select regexp_substr(id,&#39;[0-9]+&#39;,1,rn) id from temp t1,
(select level rn from dual connect by rownum <= (select length(id)-length(replace(id,&#39;,&#39;,&#39;&#39;))+1 from temp)) t2
);