REGEXP_SUBSTR hanya mengembalikan satu nilai. Anda bisa mengubah string Anda menjadi tabel semu dan kemudian menanyakannya untuk kecocokan. Ada cara berbasis XML untuk melakukan ini yang luput dari saya saat ini, tetapi menggunakan connect-by berfungsi, selama Anda hanya memiliki satu string sumber:
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;
... memberi Anda:
SUBSTR
--------------------
Txa233141b
Ta233141
Ta233142
Ta233147
Ta233148
... dan Anda dapat memfilternya dengan versi pola asli yang sedikit lebih sederhana:
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
Yang tidak terlalu cantik, tetapi juga tidak memiliki banyak nilai dalam satu bidang.