来自字符串oracle的子串

时间:2014-08-20 08:22:11

标签: sql oracle

我有字符串:'A-20-1-1', 'A-10-10', 'A-10-11-1'

来自子串的结果:

'A-20-1-1', 'A-10-10', 'A-10-11-1'
      1           10         11

代码赢得了不错的工作:

Select Substr(string, instr(string,'-',1,2)+1, instr(string, '-',1,2)-1)
From dual;

2 个答案:

答案 0 :(得分:2)

一开始我发现第二个' - ',而不是下一个' - '。如果不是,我得到字符串长度。

create table a(b varchar2(20));

insert into a values('A-20-1-1');
insert into a values('A-10-10');
insert into a values('A-10-11-1');


Select 
b, 
substr(b,instr(b,'-',1,2)+1,decode(instr(b,'-',1,3),0,length(b)-instr(b,'-',1,2),instr(b,'-',1,3)-instr(b,'-',1,2)-1)) z
from a;

告诉我们您的需求:

A-20-1-1    1
A-10-10     10
A-10-11-1   11

答案 1 :(得分:1)

首先,我找到第二个-符号位置,然后从该位置获取值的子字符串到值的其余部分。然后,如果字符串具有-符号,则从上一步中排除字符串的一部分。像这样:

with t(d) as (
  select 'A-20-1-1' from dual union all
  select 'A-10-10-4' from dual union all
  select 'A-10-11-1' from dual 
)
select REPLACE(SUBSTR(d, INSTR(d, '-', 1, 2) + 1), SUBSTR(d, INSTR(d, '-', 1, 3))) from t

RES
---
  1
 10
 11