REGEXP_SUBSTR chỉ trả về một giá trị. Bạn có thể biến chuỗi của mình thành một bảng giả và sau đó truy vấn chuỗi đó để tìm các kết quả phù hợp. Có một cách dựa trên XML để thực hiện điều này khiến tôi không hiểu được vào lúc này, nhưng sử dụng kết nối theo hoạt động, miễn là bạn chỉ có một chuỗi nguồn:
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;
... mang lại cho bạn:
SUBSTR
--------------------
Txa233141b
Ta233141
Ta233142
Ta233147
Ta233148
... và bạn có thể lọc điều đó bằng một phiên bản đơn giản hơn một chút của mẫu ban đầu:
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
Cái nào không đẹp nhưng cũng không chứa nhiều giá trị trong một trường.