substr中的数字无效

时间:2017-08-23 11:42:20

标签: oracle oracle11g

我为此查询使用了子字符串

to_number(substr(skidno,instr(skidno,'/')+1,length(skidno)))

这个我将通过查询Skid no'MMM-1718/000325/1'我的号码无效

4 个答案:

答案 0 :(得分:1)

如果您需要在第二次出现之后提取部件" /&#34 ;;以下查询将满足您的需求---

select to_number(trim('/' FROM
                      substr('MMM-1718/000325 / 1',
                             instr('MMM-1718/000325 / 1', '/', 1, 2))))
  from dual;

答案 1 :(得分:1)

您可能想要使用regexp_substr。如果您只想获取值末尾的数字:

to_number(regexp_substr(skidno, '\d+$'))

答案 2 :(得分:0)

你无法将其转换为数字,因为你会得到" /"在结果中。 结果:' 000325/1'。

如果您只需要' /'之间的数字。然后尝试下面:

to_number(substr(skidno ,instr(skidno  ,'/')+1,
 instr(skidno ,'/',1,2) -instr(skidno ,'/',1,1)-1 ))

答案 3 :(得分:0)

因为你需要在第二次出现'/'字符后开始的字符串的一部分并且到字符串的末尾,所以使用substr / instr可能是最简单的解决方案:

with t as
(
  select 'MMM-1718/000325 / 1' mystring
    from dual
)
select to_number(substr(mystring, instr(mystring, '/', 1, 2) + 1))
  from t;

注意:在这种情况下,你只需要在substr函数中定义起始位置;不需要字符串的长度。