文字列をすべての数値コンポーネントにトークン化し、最大値を見つけることができます:
select max(to_number( regexp_substr('sdfAB98:(hjkl,)AB188(uiop)uuuAB78:jknd', '(\d+)', 1, level)) ) を regexp_substr('sdfAB98 による dualconnect からの max_value として:(hjkl,)AB188(uiop)uuuAB78:jknd', '(\d+)', 1, level) は null ではありません。 MAX_VALUE---------- 188コード> プレ>
または
select max(to_number( regexp_substr('sdfAB98:(hjkl,)AB188(uiop)uuuAB78:jknd', '(\d+)', 1, level, null, 1)) ) as max_valuefrom dualconnect byレベル <=regexp_count('sdfAB98:(hjkl,)AB188(uiop)uuuAB78:jknd', '\d+'); MAX_VALUE---------- 188コード> プレ>
複数の行から値を取得する必要がある場合は、ID を一致させるために connect-by が必要であり、ループを防ぐために非決定論的関数への参照を含める必要もあります。 CTE に 2 つの値がある場合:
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_tableconnect by before id =idand before dbms_random.value is not nulland level <=regexp_count(str, '\d+' )IDでグループ化; ID MAX_VALUE---------- ---------- 1 188 2 456
プレ>