आप स्ट्रिंग को उसके सभी संख्या घटकों में टोकनाइज़ कर सकते हैं, और फिर अधिकतम प्राप्त कर सकते हैं:
select max(to_number(
regexp_substr('sdfAB98:(hjkl,)AB188(uiop)uuuAB78:jknd', '(\d+)', 1, level))
) as max_value
from dual
connect by regexp_substr('sdfAB98:(hjkl,)AB188(uiop)uuuAB78:jknd', '(\d+)', 1, level)
is not null;
MAX_VALUE
----------
188
या
select max(to_number(
regexp_substr('sdfAB98:(hjkl,)AB188(uiop)uuuAB78:jknd', '(\d+)', 1, level, null, 1))
) as max_value
from dual
connect by level <= regexp_count('sdfAB98:(hjkl,)AB188(uiop)uuuAB78:jknd', '\d+');
MAX_VALUE
----------
188
यदि आपको कई पंक्तियों से मान प्राप्त करने की आवश्यकता है, तो आपको आईडी से मिलान करने के लिए कनेक्ट-बाय की आवश्यकता है, और लूपिंग को रोकने के लिए एक गैर-नियतात्मक फ़ंक्शन का संदर्भ भी शामिल करना होगा; CTE में दो मानों के साथ:
with your_table (id, str) as (
select 1, 'sdfAB98:(hjkl,)AB188(uiop)uuuAB78:jknd' from dual
union all select 2, '123abc456abc78d9' from dual
)
select id, max(to_number(regexp_substr(str, '(\d+)', 1, level, null, 1))) as max_value
from your_table
connect by prior id = id
and prior dbms_random.value is not null
and level <= regexp_count(str, '\d+')
group by id;
ID MAX_VALUE
---------- ----------
1 188
2 456