我正在使用Oracle 11g,我想使用REGEXP_SUBSTR来匹配给定模式的所有事件.例如
SELECT
REGEXP_SUBSTR('Txa233141b Ta233141 Ta233142 Ta233147 Ta233148',
'(^|\s)[A-Za-z]{2}[0-9]{5,}(\s|$)') "REGEXP_SUBSTR"
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
只返回第一个匹配Ta233141,但我想返回与正则表达式匹配的其他匹配项,即Ta233142 Ta233147 Ta233148.
Ale*_*ole 18
REGEXP_SUBSTR只返回一个值.您可以将字符串转换为伪表,然后查询匹配项.有一种基于XML的方法,目前让我无法逃脱,但使用connect-by工作,只要你只有一个源字符串:
SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, LEVEL) AS substr
FROM (
SELECT 'Txa233141b Ta233141 Ta233142 Ta233147 Ta233148' AS str FROM DUAL
)
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, '[^ ]+')) + 1;
Run Code Online (Sandbox Code Playgroud)
... 给你:
SUBSTR
--------------------
Txa233141b
Ta233141
Ta233142
Ta233147
Ta233148
Run Code Online (Sandbox Code Playgroud)
...并且您可以使用原始模式的稍微简单的版本来过滤它:
SELECT substr
FROM (
SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, LEVEL) AS substr
FROM (
SELECT 'Txa233141b Ta233141 Ta233142 Ta233147 Ta233148' AS str
FROM DUAL
)
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, '[^ ]+')) + 1
)
WHERE REGEXP_LIKE(substr, '^[A-Za-z]{2}[0-9]{5,}$');
SUBSTR
--------------------
Ta233141
Ta233142
Ta233147
Ta233148
Run Code Online (Sandbox Code Playgroud)
这不是很漂亮,但是在一个字段中都没有包含多个值.
归档时间: |
|
查看次数: |
25187 次 |
最近记录: |