0
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。

谢谢!

4

2 回答 2

3

虽然你可以使用regexp_substr()这个,但我会采取不同的方法。我只是寻找'8'使用instr(),然后取接下来的 10 个字符:

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

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

于 2015-03-20T02:23:50.137 回答
2

您可以使用,但正则表达式是一项昂贵的操作,因此使用andREGEXP_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;
于 2015-03-20T02:43:50.170 回答