2

我有一个查询结果,应该得到一列的最后数字说“术语”

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 。

4

3 回答 3

10

使用REGEXP_SUBSTR,

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

更多细节在这里

演示在这里

于 2013-07-30T11:15:57.937 回答
1

Oracle 具有满足regexp_instr()您需求的功能:

select term, cast(substr(term, 1-regexp_instr(reverse(term),'[^0-9]')) as int) as number
于 2013-07-30T10:46:42.910 回答
-1
select SUBSTRING(acc_no,len(acc_no)-1,len(acc_no)) from table_name;
于 2015-01-02T08:50:46.830 回答