Oracle regexp_substr - 查找并提取列中的所有出现

时间:2016-08-03 08:48:00

标签: sql oracle regexp-substr

我正在使用Oracle数据库,我试图在匹配特定模式的字符串中查找并提取所有匹配项...

它应该是3个字母,3个数字,然后可能是一个字母或不是

我试过了:

SELECT REGEXP_SUBSTR(my_column, '[A-Za-z]{3}(\d)(\d)(\d)') AS values 
FROM my_table

但它只返回第一次出现。

使用

REGEXP_SUBSTR(my_column, '[A-Za-z]{3}(\d)(\d)(\d)', 0, 0, 'i')

无论是

还是

有人有什么想法吗?

修改

我试图从PLSQL文件中提取它。所以它非常像SQL查询,如

select * 
from abc123 
where some_value = 'some_value'

2 个答案:

答案 0 :(得分:1)

尝试此查询以打破 ABC123CDE456FGHI789 squence

ABC123
CDE456
GHI789

<强>输出

select regexp_substr('ABC123CDE456FGH789', '[A-Za-z]{3}(\d){3}', 1, i) STR from dual

要获得特定位置,您需要使用

select regexp_substr('ABC123CDE456FGH789', '[A-Za-z]{3}(\d){3}', 1, 1) STR from dual

根据

等位置更改i值
ABC123

输出

<link rel="stylesheet" href="..." media="print">

答案 1 :(得分:1)

尝试在 1.2.3 中获取数字(假设它是某个国家/地区的域名)

SELECT str,level,REGEXP_SUBSTR(str, '[0-9]', 1, LEVEL) AS substr
FROM (
SELECT country_domain str from country where regexp_like(country_domain, '[0-9]')
)
CONNECT BY LEVEL <= REGEXP_count(str, '[0-9]');

<强>输出

STR    LEVEL SUBSTR
1.2.3   1     1
1.2.3   2     2
1.2.3   3     3