Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle:tìm số lớn nhất trong một chuỗi

Bạn có thể mã hóa chuỗi thành tất cả các thành phần số của nó và sau đó tìm giá trị tối đa:

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

hoặc

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

Nếu bạn cần lấy giá trị từ nhiều hàng, bạn cần kết nối theo để khớp với các ID và cũng cần bao gồm tham chiếu đến một hàm không xác định để ngăn lặp; với hai giá trị trong 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. Sự khác biệt giữa (*) và. * Trong regexp là gì?

  2. Phát triển trên phiên bản Oracle cục bộ

  3. SQL - Cách chọn hàng có cột có giá trị lớn nhất trong Oracle

  4. Oracle PL / SQL:Động lặp lại các cột kích hoạt

  5. Hiển thị các giá trị được nối trong Truy vấn SQL