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

时间:2015-03-20 01:34:20

标签: sql regex oracle oracle11g regexp-substr

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

我想从ID_Descr字段中提取字符串,条件如下:

  1. 字符串始终以8
  2. 开头
  3. 字符串长度始终为10位数
  4. 这意味着将所有内容剥离到字符串的右侧和左侧(例如,' 8002082669')。我怎样才能做到这一点?使用REGEXP_SUBSTR?

    我正在使用Oracle 11g。

    谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

您可以使用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;