请教一个问题:比如有一个字符串,v_str := 'aBcX234EfX789uyTr'
是否能通过oracle自带的一个函数或者函数组合,从字符串中抽取出“X数字”的所有匹配,并用逗号连接起来,即
function(v_str) = 'X234,X789'
是否 regexp_ 相关函数能做到?
是否能通过oracle自带的一个函数或者函数组合,从字符串中抽取出“X数字”的所有匹配,并用逗号连接起来,即
function(v_str) = 'X234,X789'
是否 regexp_ 相关函数能做到?
解决方案 »
- CRS-0184: Cannot communicate with the CRS daemon. RAC重启错误
- 如何查询road到oracle的jar包
- oracle某个表里的某一行无法执行update语句
- 大数据表之间的关联查询 问题请求帮助
- 那位兄弟在用legato的networker备份啊,急(100)?
- oracle9i ORA-01843:无效的月份(急,在线等。)
- 我刚从sql server转到oracle来的,一个update就快疯了。
- 哪里有下载oracle9i吗?
- 默认值问题
- 大家来研究一下这个存储
- 把92语法的sql改成99语法,怎么改?
- ora 违反唯一约束条件错误 !!急啊!各位帮忙
采用循环,i++,把匹配的数取出来再拼上就可以了。
SQL> set serveroutput on;
SQL> declare
2 v_str varchar(100) := 'aBcX234EfX789uyTr';
3 begin
4 dbms_output.put_line(
5 regexp_replace(
6 regexp_replace(regexp_replace(replace(v_str,'X','aX'),'[^X0-9]',','),',{2,}',',')
7 ,'^,|,$','')
8 );
9 end;
10 /
X234,X789 PL/SQL 过程已成功完成。
aBcX234EfX789uyTXr56 这样的字符串会输出X234,X789,X,56好吧,写个循环
declare
l_str varchar2(128) := 'aBcX234EfX789uyTXr56';
l_substr varchar2(128);
l_result varchar2(128);
l_occurrence int := 1;
begin
loop
select regexp_substr(l_str, 'X[0-9]+', 1, l_occurrence) into l_substr from dual;
exit when l_substr is null;
if (l_occurrence <> 1) then
l_result := l_result || ',';
end if;
l_result := l_result || l_substr;
l_occurrence := l_occurrence + 1;
end loop;
dbms_output.put_line(l_result);
end;
第四个参数表示如果找到多个子串,返回第几个子串,利用这个参数,循环查找就行。
--发现问题是好事情,哥们,再去试,呵呵
SQL> declare
2 v_str varchar(100) := 'aBcX234EfX789uyTrXr56';
3 begin
4 dbms_output.put_line(
5 regexp_replace(
6 regexp_replace(regexp_replace(replace(v_str,'X','aX'),
7 '[A-WYZa-z]{1}[0-9]+|[^X0-9]|^[0-9]+',','),',{2,}',',')
8 ,'^,|,$|,?X+[^0-9]','')
9 );
10 end;
11 /
X234,X789 已順利完成 PL/SQL 程序.