REGEXP_SUBSTR केवल एक मान देता है। आप अपनी स्ट्रिंग को छद्म तालिका में बदल सकते हैं और फिर मैचों के लिए पूछ सकते हैं। ऐसा करने का एक एक्सएमएल-आधारित तरीका है जो इस समय मुझसे बच जाता है, लेकिन कनेक्ट-बाय कार्यों का उपयोग करते हुए, जब तक आपके पास केवल एक स्रोत स्ट्रिंग हो:
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;
... आपको देता है:
SUBSTR
--------------------
Txa233141b
Ta233141
Ta233142
Ta233147
Ta233148
... और आप इसे अपने मूल पैटर्न के थोड़े सरल संस्करण के साथ फ़िल्टर कर सकते हैं:
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
जो बहुत सुंदर नहीं है, लेकिन न तो एक ही क्षेत्र में एकाधिक मान धारण कर रहा है।