我有字符串:'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;
答案 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