Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle:temukan angka terbesar dalam satu string

Anda dapat membuat tokenisasi string menjadi semua komponen nomornya, dan kemudian menemukan maksimum:

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

atau

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

Jika Anda perlu mendapatkan nilai dari beberapa baris, Anda memerlukan connect-by untuk mencocokkan ID, dan juga perlu menyertakan referensi ke fungsi non-deterministik untuk mencegah perulangan; dengan dua nilai dalam 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengaktifkan jejak di aplikasi oracle r12

  2. Kueri sql dengan eksekusi variabel ikat di Jdbc

  3. SUBSTR() Fungsi di Oracle

  4. Menemukan kontrak terbaru untuk setiap akun

  5. Kesalahan memuat oci8.so dengan server Ubuntu 17.04 php 7 dan Apache2