sql >> データベース >  >> RDS >> Oracle

Oracle:1 つの文字列内で最大の数を見つける

    文字列をすべての数値コンポーネントにトークン化し、最大値を見つけることができます:

    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  

    1. N+1の冗長性とサーバーの統合

    2. データベースの同期MysqlSQLite

    3. SQLクエリの最大長

    4. SQLエラー:ORA-00913:値が多すぎます