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 字段中提取具有以下条件的字符串:
- 字符串总是以 8 开头
- 字符串长度始终为 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;
Table A
ID ID_Descr
1 'DUP 8002061286'
2 'DUP 8002082667 '
3 ' 8002082669 DUP'
我想从 ID_Descr 字段中提取具有以下条件的字符串:
- 字符串总是以 8 开头
- 字符串长度始终为 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;