Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle:намерете най-голямото число в рамките на един низ

Можете да токенизирате низа във всички негови числови компоненти и след това да намерите максимума:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на ORA-03115:неподдържан мрежов тип данни или грешка при представяне при извличане на масив от varchar от анонимен pl/sql

  2. да инсталирате Oracle Instantclient на Mac OS/X без да задавате променливи на средата?

  3. Задаване на classpath за Java съхранена процедура в Oracle

  4. Условие за присъединяване към Oracle с Топ 1

  5. Oracle АКО съществува ТОГАВА, ИНАЧЕ