powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнить два строковых значения и получить одинаковую часть
7 сообщений из 7, страница 1 из 1
Сравнить два строковых значения и получить одинаковую часть
    #39285243
savinoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например, есть две строки (назначения платежа), которые похожи между собой:

строка 1 = 'За полученный товар по Договору N 555/12 от 29.04.11 Сумма 999999-00В т.ч. НДС(18%) 179999-82'
строка 2 = 'За полученный товар по Договору N 444/13 от 30.05.12 Сумма 1111-55В т.ч. НДС(18%) 200-08'

Как получить то, что в них одинаково? Для примера выше:

результат = 'За полученный товар по Договору N от .0.1 Сумма -В т.ч. НДС(18%) '
...
Рейтинг: 0 / 0
Сравнить два строковых значения и получить одинаковую часть
    #39285261
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savinoffКак получить то, что в них одинаково? Для примера выше:

результат = 'За полученный товар по Договору N от .0.1 Сумма -В т.ч. НДС(18%) 'Одинакового в них больше.
...
Рейтинг: 0 / 0
Сравнить два строковых значения и получить одинаковую часть
    #39285302
savinoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Количество одиннаковости можно посчитать с utl_match, а вот, какие варианты получить то, что именно одинаково?
...
Рейтинг: 0 / 0
Сравнить два строковых значения и получить одинаковую часть
    #39285359
у вас постановка задачи хромает
если именно общее, то выведет совсем не то, что вы показали, а вот, например, это:

За полученный товар по Договору N 555/12 от 2.04.11 Сумма -00В т.ч. НДС(18%) 1-82

сам код для этого случая:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
with a as
 (select 'За полученный товар по Договору N 555/12 от 29.04.11 Сумма 999999-00В т.ч. НДС(18%) 179999-82' str1
    from dual),
b as
 (select 'За полученный товар по Договору N 444/13 от 30.05.12 Сумма 1111-55В т.ч. НДС(18%) 200-08' str2
    from dual),
a_sym as
 (select level a_n, substr(a.str1, level, 1) a_s
    from a
  connect by level <= length(a.str1)),
b_sym as
 (select level b_n, substr(b.str2, level, 1) b_s
    from b
  connect by level <= length(b.str2)),
ab_com as
 (select a_s ab
    from a_sym
  intersect
  select b_sym.b_s from b_sym)
select listagg(a_s, '') within group (order by a_n)
  from a_sym
 where a_sym.a_s in (select ab from ab_com)
 order by a_sym.a_n



или вот это:
За полученный товар по Договору N 444/1 от 0.05.12 Сумма 1111-55В т.ч. НДС(18%) 200-08
код для второго случая (найдите 6 отличий):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
with a as
 (select 'За полученный товар по Договору N 555/12 от 29.04.11 Сумма 999999-00В т.ч. НДС(18%) 179999-82' str1
    from dual),
b as
 (select 'За полученный товар по Договору N 444/13 от 30.05.12 Сумма 1111-55В т.ч. НДС(18%) 200-08' str2
    from dual),
a_sym as
 (select level a_n, substr(a.str1, level, 1) a_s
    from a
  connect by level <= length(a.str1)),
b_sym as
 (select level b_n, substr(b.str2, level, 1) b_s
    from b
  connect by level <= length(b.str2)),
ab_com as
 (select a_s ab
    from a_sym
  intersect
  select b_sym.b_s from b_sym)
select listagg(b_s, '') within group (order by b_n)
  from b_sym
 where b_sym.b_s in (select ab from ab_com)
 order by b_sym.b_n



если вам нужно идти по одной строке и из второй сравнивать строго не дальше n символов от текущей позиции, то можете попробовать сами на основе приведённой рыбы с помощью lead/last, например.
...
Рейтинг: 0 / 0
Сравнить два строковых значения и получить одинаковую часть
    #39285539
savinoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо болшое.
Тут идёт попозиционное сравнение.
Хочется найти функцию, которая могла бы выделить одинаковую часть. Или выдать разницу между строками (такой-то символ удалили, такой-то добавили). Нашёл в python difflib.ndiff + difflib.restore, он работает почти как надо.
...
Рейтинг: 0 / 0
Сравнить два строковых значения и получить одинаковую часть
    #39285736
savinoffХочется найти функцию, которая могла бы выделить одинаковую часть
regexp_substr
...
Рейтинг: 0 / 0
Сравнить два строковых значения и получить одинаковую часть
    #39285780
xifos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
savinoff,

В общем случае это может быть задача поиска https://ru.wikipedia.org/wiki/Наибольшая_общая_подстрока

Но очень часто и простого diff бывает достаточно

Либо, если речь идет о сжатии данных - словаря
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнить два строковых значения и получить одинаковую часть
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]