使用oracle sql substr获取最后的数字

时间:2013-07-30 10:40:44

标签: sql regex oracle substr

我有一个查询结果,我应该得到一列的最后数字说'term'

The value of column term can be like:
'term'     'number' (output)
---------------------------
xyz012         12
xyz112         112
xyz1           1
xyz02          2
xyz002         2
xyz88          88

注意:不限于以上场景,但要求是最后3个或更少的字符可以是数字

我使用的功能:to_number(substr(term.name,-3)) (最初我假设要求,因为最后3个字符总是数字,但我错了)

我正在使用to_number,因为如果最后3位是'012'那么数字应为'12' 但正如人们在某些特定情况下可以看到的那样,例如'xyz88','xyz1')会给出一个

  

ORA-01722:无效号码

如何使用substr或regexp_substr实现此目的?

没有多探索regexp_substr。

3 个答案:

答案 0 :(得分:9)

使用REGEXP_SUBSTR

select column_name, to_number(regexp_substr(column_name,'\d+$'))
 from table_name;
  • \ d匹配数字。与+一起,它变成一个有一个或多个数字的组。
  • $匹配行尾。
  • 将它组合在一起,这个正则表达式在字符串的末尾提取一组数字。

更多详情here

演示here

答案 1 :(得分:1)

Oracle的函数regexp_instr()可以满足您的需求:

select term, cast(substr(term, 1-regexp_instr(reverse(term),'[^0-9]')) as int) as number

答案 2 :(得分:-1)

select SUBSTRING(acc_no,len(acc_no)-1,len(acc_no)) from table_name;