怎么在 oracle 存储过程中 使用正则表达式!!!

dj9960 2004-10-13 03:32:20
打个比方我想把2:1中的2和1分别取出,怎么在 oracle 存储过程中 使用正则表达式把它取出!!!
...全文
441 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dj9960 2004-10-13
  • 打赏
  • 举报
回复
解决了,谢谢大家!!!
bzszp 2004-10-13
  • 打赏
  • 举报
回复
长度不是问题
15:53:00 SQL> declare
15:55:16 2 v_str varchar2(50):='1:341:3534:sefef:jtyj';
15:55:32 3 v_num number;
15:55:35 4 v_temp varchar2(10);
15:55:35 5 begin
15:55:35 6 for i in 1..length(v_str)-length(replace(translate(v_str,':',' '),' ','')) loop
15:55:35 7 v_temp:=substr(v_str,1,instr(v_str,':')-1);
15:55:35 8 v_str:=substr(v_str,instr(v_str,':')+1);
15:55:35 9 dbms_output.put_line(v_temp);
15:55:35 10 end loop;
15:55:35 11 dbms_output.put_line(v_str);
15:55:35 12 end;
15:55:35 13 /
1
341
3534
sefef
jtyj

PL/SQL 过程已成功完成。

已用时间: 00: 00: 00.31
15:55:35 SQL>

不知道你的用途
flamingo100 2004-10-13
  • 打赏
  • 举报
回复
先用instr找到:的位置,然后再利用substr()和length()截取
bzszp 2004-10-13
  • 打赏
  • 举报
回复
15:52:55 SQL> declare
15:52:58 2 v_str varchar2(50):='1:2:3:4:5';
15:52:58 3 v_num number;
15:52:58 4 v_temp varchar2(10);
15:52:58 5 begin
15:52:58 6 for i in 1..length(v_str)-length(replace(translate(v_str,':',' '),' ','')) loop
15:52:58 7 v_temp:=substr(v_str,1,instr(v_str,':')-1);
15:52:58 8 v_str:=substr(v_str,instr(v_str,':')+1);
15:52:58 9 dbms_output.put_line(v_temp);
15:52:58 10 end loop;
15:52:58 11 dbms_output.put_line(v_str);
15:52:59 12 end;
15:53:00 13 /
1
2
3
4
5

PL/SQL 过程已成功完成。

已用时间: 00: 00: 00.47
15:53:00 SQL>
zmgowin 2004-10-13
  • 打赏
  • 举报
回复
正则表达式的写法不会
zmgowin 2004-10-13
  • 打赏
  • 举报
回复
15:54:48 SQL> select * from t1;

A
----------
10:5
10:50
1:50
1:5

已用时间: 00: 00: 00.15
15:54:52 SQL> select substr(a,1,instr(a,':')-1) a,substr(a,instr(a,':')+1,length
(a)) b from t1;

A B
---------- ----------
10 5
10 50
1 50
1 5

已用时间: 00: 00: 00.15
dj9960 2004-10-13
  • 打赏
  • 举报
回复
呵呵,不行,:前后的数值长度不一样如果是10:1怎么办!!!,那个字段里有几万条类似于这样的数据!!!
bzszp 2004-10-13
  • 打赏
  • 举报
回复
15:45:11 SQL> select substr('2:1:3',instr('2:1:3',':',2)+1,
15:45:14 2 instr('2:1:3',':',3)-instr('2:1:3',':',2)-1) from dual;

S
-
1

已用时间: 00: 00: 00.15
15:45:19 SQL> select substr('2:1:3',1,instr('2:1:3',':')-1) from dual;

S
-
2

已用时间: 00: 00: 00.15
15:45:36 SQL> select substr('2:1:3',instr('2:1:3',':',2)+1,
15:45:38 2 instr('2:1:3',':',3)-instr('2:1:3',':',2)-1) from dual;

S
-
1

已用时间: 00: 00: 00.16
15:45:56 SQL> select substr('2:1:3',instr('2:1:3',':',3)+1) from dual;

S
-
3

已用时间: 00: 00: 00.16
15:46:02 SQL>
sywen 2004-10-13
  • 打赏
  • 举报
回复
用substr()函数不就行了吗
dj9960 2004-10-13
  • 打赏
  • 举报
回复
是的,把2:1 拆分成2和1
bzszp 2004-10-13
  • 打赏
  • 举报
回复
拆分字符串吗?
说的详细一点

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧