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

Функция Oracle за връщане на сходство между низове

След като прочетох отново въпроса ви, ето какво наистина искате:

with cte1 as  (
    select 1 id, 'abc def hijk www' str from dual
    union all
    select 2 id, 'abc def iosk www' str from dual
), num_gen as (
    -- a number generator up to the minimum length of the strings
    SELECT level num
    FROM dual t
    CONNECT BY level <= (select min(length(str)) from cte1)
), cte2 as (
    -- build substrings of increasing length
    select id, num_gen.num, substr(cte1.str, 1, num_gen.num) sub
    from cte1
    cross join num_gen
), cte3 as (
    -- self join to check if the substrings are equal
    select x1.num, x1.sub sub1, x2.sub sub2
    from cte2 x1
    join cte2 x2 on (x1.num = x2.num and x1.id != x2.id)
), cte4 as (
    -- select maximum string length
    select max(num) max_num
    from cte3
    where sub1 = sub2
)
    -- finally, get the substring with the max length
    select cte3.sub1
    from cte3
    join cte4 on (cte4.max_num = cte3.num)
    where rownum = 1

По същество това е, което бихте направили в pl/sql:Създайте поднизове с нарастваща дължина и спрете в точката, в която вече не съвпадат.



  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 изтриване / съкращаване

  2. Списък с елементи на формат за дата и време в Oracle

  3. Как да асоциирам потребител към множество схеми на база данни?

  4. Sql loader - вторият заграден низ не присъства

  5. Как да използвам повторно пропуските в последователността на Oracle в колоната с първичен ключ?