Table A
ID ID_Descr
1 'DUP 8002061286'
2 'DUP 8002082667 '
3 ' 8002082669 DUP'
我想从ID_Descr字段中提取字符串,条件如下:
这意味着将所有内容剥离到字符串的右侧和左侧(例如,' 8002082669')。我怎样才能做到这一点?使用REGEXP_SUBSTR?
我正在使用Oracle 11g。
谢谢!
答案 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;