REGEXP_SUBSTR retourneert slechts één waarde. Je zou van je string een pseudo-tabel kunnen maken en die vervolgens op overeenkomsten kunnen opvragen. Er is een XML-gebaseerde manier om dit te doen die me op dit moment ontgaat, maar het gebruik van connect-by werkt, zolang je maar één bronstring hebt:
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;
... geeft je:
SUBSTR
--------------------
Txa233141b
Ta233141
Ta233142
Ta233147
Ta233148
... en je kunt dat filteren met een iets eenvoudigere versie van je originele patroon:
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
Dat is niet erg mooi, maar het is ook niet zo dat meerdere waarden in één veld staan.