Oracle - 在Word中搜索Word

时间:2017-10-05 22:24:44

标签: sql string oracle search plsql

我希望那里有一颗足以帮助失去灵魂的大脑;

我有两列; COL_ACOL_B,两列的每条记录只包含一个单词(单词的长度可以变化)。

我要做的是搜索COL_A并识别与COL_B的部分(字)匹配,例如COL_A = 'MSOFT'COL_B = 'MICROSOFT'因此这将是归类为匹配。

同样,如果COL_A = 'RANGE'COL_B = 'ORANGE'这也会被归类为匹配。

但是,如果COL_A = 'ORGAN'COL_B = 'ORANGE'这不属于匹配项。

我愿意接受建议(纯SQL,函数等)。

一如既往,我们非常感谢任何帮助。

非常感谢提前!

3 个答案:

答案 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