Oracle中有字符数字,截取数字
如图所示,要截取第二个横杠到第三个横杆之间的数字,要怎么截取?比如第一行的42265,第五行的684554,位数不同。...
如图所示,要截取第二个横杠到第三个横杆之间的数字,要怎么截取?
比如第一行的42265,第五行的684554,位数不同。 展开
比如第一行的42265,第五行的684554,位数不同。 展开
1个回答
展开全部
这个最后写个split函数,然后取数组的第三个数据。
CREATE OR REPLACE TYPE mytable AS TABLE OF varchar2(100);
create or replace function split(src varchar2, delimiter varchar2)
return mytable is
psrc varchar2(500);
a mytable := mytable();
i number := 1; --
j number := 1;
begin
psrc := rtrim(ltrim(src, delimiter), delimiter);
loop
i := instr(psrc, delimiter, j);
--dbms_output.put_line(i);
if i > 0 then
a.extend;
a(a.count) := trim(substr(psrc, j, i - j));
j := i + 1;
--dbms_output.put_line(a(a.count-1));
end if;
exit when i = 0;
end loop;
if j < length(psrc) then
a.extend;
a(a.count) := trim(substr(psrc, j, length(psrc) + 1 - j));
end if;
return a;
end;
CREATE OR REPLACE TYPE mytable AS TABLE OF varchar2(100);
create or replace function split(src varchar2, delimiter varchar2)
return mytable is
psrc varchar2(500);
a mytable := mytable();
i number := 1; --
j number := 1;
begin
psrc := rtrim(ltrim(src, delimiter), delimiter);
loop
i := instr(psrc, delimiter, j);
--dbms_output.put_line(i);
if i > 0 then
a.extend;
a(a.count) := trim(substr(psrc, j, i - j));
j := i + 1;
--dbms_output.put_line(a(a.count-1));
end if;
exit when i = 0;
end loop;
if j < length(psrc) then
a.extend;
a(a.count) := trim(substr(psrc, j, length(psrc) + 1 - j));
end if;
return a;
end;
更多追问追答
追问
只有存储过程?有没有可以执行的SQL语句?我要提取数据复制到这个表的另外一列
追答
上面的只是一个函数,怎么把字符串截取成子字符串,如果单用一句SQL是搞不定你的要求的。
接下来你要写段PL/PLUS,调用下这个函数,将目标子字符串插入到字段中去。
declare
v_str varchar2(10);
begin
select column_value
into v_str
from (select column_value, rownum as row_id
from table(split('460-00-42265-32825', '-'))
order by rownum)
where row_id = 3;
update table_name t set t.colum = v_str where ......;
end;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询