为了账号安全,请及时绑定邮箱和手机立即绑定

请教一个oracle开发的问题?

请教一个oracle开发的问题?

慕码人8056858 2019-02-14 14:11:12
比如:v_str := 'abc123dsdfo456dfaj78dsl'通过某个函数 function(v_str) 能得到 '123,456,78'是否 regexp_ 相关函数能做到?上面的场景相对简单,改成如下场景:v_str := 'aBcX234EfX789uyTr'是否能通过oracle自带函数从字符串中抽取出“X数字”的所有匹配,并用逗号连接起来,即function(v_str) = 'X234,X789'存不存在这样的function,是否 regexp_ 相关函数能做到?
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

FUNCTION REGEXP_SUBSTR_ALL(V_SRC VARCHAR, V_PATTERN VARCHAR2) RETURN VARCHAR2 IS
N_COUNT NUMBER;
I NUMBER;
V_RESULT VARCHAR2(4000);
BEGIN
N_COUNT := REGEXP_COUNT(V_SRC, V_PATTERN);
FOR I IN 1.. N_COUNT LOOP
V_RESULT := V_RESULT || REGEXP_SUBSTR(V_SRC, V_PATTERN, 1, I);
END LOOP;
RETURN V_RESULT;

END;
select REGEXP_SUBSTR_ALL('aBcX234EfX789uyTr', '\d+') from dual;
返回: 234789
函数定义如下: 在oracle 11g中可用
FUNCTION REGEXP_SUBSTR_ALL(V_SRC VARCHAR, V_PATTERN VARCHAR2) RETURN VARCHAR2 IS
N_COUNT NUMBER;
I NUMBER;
V_RESULT VARCHAR2(4000);
BEGIN
N_COUNT := REGEXP_COUNT(V_SRC, V_PATTERN);
FOR I IN 1.. N_COUNT LOOP
V_RESULT := V_RESULT || REGEXP_SUBSTR(V_SRC, V_PATTERN, 1, I);
END LOOP;
RETURN V_RESULT;

END;



查看完整回答
反对 回复 2019-03-26
?
慕森王

TA贡献1777条经验 获得超3个赞

select REGEXP_REPLACE('abc123dsdfo456dfaj78dsl','[^0-9]','') from dual

如果达到
'X234,X789'

的效果,请查阅相关正则资料

查看完整回答
反对 回复 2019-03-26
  • 2 回答
  • 0 关注
  • 551 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信