Возможно, вы можете использовать LAG () для этой цели (см. документация ).Пример:
Таблица и данные
create table t1 ( column_a, column_b )
as
select 'string100', 'string200' from dual union
select 'string200', 'string100' from dual union
select 'string300', 'string100' from dual union
select 'string400', 'string500' from dual union
select 'string500', 'string400' from dual ;
Найти "предыдущие" значения с помощью LAG ()
select
column_a
, column_b
, lag ( column_a, 1, 0 ) over ( order by column_a ) preceding_a
from t1 ;
COLUMN_A COLUMN_B PRECEDING_A
string100 string200 0
string200 string100 string100
string300 string100 string200
string400 string500 string300
string500 string400 string400
Окончательный запрос и результаты
-- Check: is Row1 columnA subtring = Row2 columnB substring
select column_a, column_b,
case
when substr( preceding_a, 7, 1 ) = substr( column_b, 7, 1 ) then
'substring Row1 columnA = substring Row2 columnB'
else
'substrings don''t match'
end compare_substrings
from (
select
column_a
, column_b
, lag ( column_a, 1, 0 ) over ( order by column_a ) preceding_a
from t1
) ;
COLUMN_A COLUMN_B COMPARE_SUBSTRINGS
string100 string200 substrings don't match
string200 string100 substring Row1 columnA = substring Row2 columnB
string300 string100 substrings don't match
string400 string500 substrings don't match
string500 string400 substring Row1 columnA = substring Row2 columnB
Вы, вероятно, можете сделать «окончательный запрос» более компактным (т.е. без написания встроенного представления). Dbfiddle здесь .