REGEXP_SUBSTR 提取从数字开始的固定长度字符串

REGEXP_SUBSTR to extract fixed length string starting from a digit

Table A
ID     ID_Descr
1     'DUP 8002061286'
2     'DUP 8002082667  '
3     ' 8002082669 DUP'

我想从 ID_Descr 字段中提取具有以下条件的字符串:

  1. 字符串总是以 8 开头
  2. 字符串长度始终为 10 位数字

这意味着去除字符串左右两侧的所有内容(例如“8002082669”)。我怎样才能做到这一点?使用 REGEXP_SUBSTR?

我正在使用 Oracle 11g。

谢谢!

尽管您可以为此使用 regexp_substr(),但我会采用不同的方法。我只想使用 instr() 查找 '8',然后取下 10 个字符:

select substr(id_descr, instr(id_descr, '8'), 10)

这似乎是最简单的解决方案。

您可以使用 REGEXP_SUBSTR(),但正则表达式是一项昂贵的操作,因此您最好使用 SUBSTR()INSTR():

SELECT SUBSTR(ID_Descr, INSTR(ID_Descr, '8'), 10) FROM tableA;

如果你真的想使用 REGEXP_SUBSTR() 你可以按如下方式进行:

SELECT REGEXP_SUBSTR(ID_Descr, '8.{9}') FROM tableA;

这将得到 8 加上以下 9 个字符(. 是通配符)。

现在,如果您只想匹配 个数字,那么 REGEXP_SUBSTR() 可能是您最好的选择:

SELECT REGEXP_SUBSTR(ID_Descr, '8[0-9]{9}') FROM tableA;