在這裏的工作就是要解決這個簡單的方法。這並不美觀,而且可能效率不高(但問題本身可能沒有非常有效的解決方案,就其性質而言)。儘管如此,閱讀,理解和維護應該很容易。
我假設col_a中的NULL被視爲「空字符串」,因此無論col_b中的內容如何,它都與col_b匹配。如果您想將其視爲實際的NULL,則可以在MATCH
列中返回'N'或者更好的NULL值。
with
inputs (col_a, col_b) as (
select 'MSOFT', 'MICROSOFT' from dual union all
select 'RANGE', 'ORANGE' from dual union all
select 'BLUES', 'BLUES' from dual union all
select 'ORGAN', 'ORANGE' from dual union all
select 'ALMA' , 'KALIMERA' from dual union all
select null , 'OCTOPUS' from dual union all
select 'ALPHA', 'ALPHABET' from dual
)
-- End of simulated inputs (for testing only, not part of the solution).
-- SQL query begins BELOW THIS LINE. Use your actual table and column names.
select col_a, col_b,
case when col_a is null then 'Y'
when exists (select level from dual
where col_a = substr(col_b, 1, level - 1) ||
substr(col_b, -(length(col_a) - level + 1),
length(col_a) - level + 1)
connect by level <= length(col_a) + 1
)
then 'Y'
else 'N' end as match
from inputs;
COL_A COL_B M
----- --------- -
MSOFT MICROSOFT Y
RANGE ORANGE Y
BLUES BLUES Y
ORGAN ORANGE N
ALMA KALIMERA N
OCTOPUS Y
ALPHA ALPHABET Y
目前仍不清楚你的意思是一場比賽。所以如果col_A ='RANGE'和col_B ='ORANGE'是一個匹配項;如果col_A ='ORANGE'和col_B ='RANGE',它仍然是一個匹配嗎?這是否是另一個的子詞呢?那麼:這兩個詞之間的區別必須是一個連續的子字符串(如在所有例子中),還是'ALMA'匹配'K ** AL ** I ** M ** ER ** A **'? – mathguy
您好,Mathguy,對於模棱兩可道歉, COL_A將始終包含少於或相同數量的字符作爲COL_B。關於字符串; OK,這將是一個連續的子字符串(因此'ALMA'和'KALIMERA'不會被視爲匹配。非常感謝。 – MAndrews
OK,所以匹配意味着第一行是初始子字符串,最後一個子字符串最後一個),或者初始子字符串和最後一個子字符串的連接?任何其他情況意味着「差異」不是連續的。請確認。然後:有趣的問題!不確定它在現實生活中的真正適用性,但這是一個很好的挑戰(因爲有很多方法可以匹配,所以非常簡單) – mathguy