我有一个查询结果,我应该得到一列的最后数字说'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。
答案 0 :(得分:9)
使用REGEXP_SUBSTR
,
select column_name, to_number(regexp_substr(column_name,'\d+$'))
from table_name;
更多详情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;