我希望那里有一颗足以帮助失去灵魂的大脑;
我有两列; COL_A
和COL_B
,两列的每条记录只包含一个单词(单词的长度可以变化)。
我要做的是搜索COL_A
并识别与COL_B
的部分(字)匹配,例如COL_A = 'MSOFT'
,COL_B = 'MICROSOFT'
因此这将是归类为匹配。
同样,如果COL_A = 'RANGE'
和COL_B = 'ORANGE'
这也会被归类为匹配。
但是,如果COL_A = 'ORGAN'
和COL_B = 'ORANGE'
这不属于匹配项。
我愿意接受建议(纯SQL,函数等)。
一如既往,我们非常感谢任何帮助。
非常感谢提前!
答案 0 :(得分:1)
这是一种解决此问题的简单方法。它不漂亮,而且效率可能不高(但问题本身可能没有非常有效的解决方案,就其性质而言)。它应该易于阅读,理解和维护。
我假设col_a中的NULL被视为"空字符串"因此它与col_b匹配,无论col_b中是什么。如果您希望将其视为实际的NULL,则可以返回N' N'或者,更好的是,MATCH
列中的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
答案 1 :(得分:0)
一个简单的like
条件应该可以解决问题:
SELECT *
FROM mytable
WHERE col_a LIKE '%' || col_b || '%'
答案 2 :(得分:0)
这样的东西......适用于您的样本数据
File.ReadLine