我需要显示数据,如果在另一个使用sql的列中至少有一个字符串

c8ib6hqw  于 2021-07-26  发布在  Java
关注(0)|答案(4)|浏览(295)

我在一个表中有两列,第1列包含 tom jerry 第二列有 tom x . 我需要获取行,至少有一个字符串存在于另一列数据中

column1         column2 
-----------------------------
tom jerry   :   tom xxx
tiger       :   tom yyy
tiger lion  :   lipard
lion tom    :   tiger lion 
23          :   235 452
23          :   23

预期结果:

column1          column2 
---------------------------
tom jerry   :    tom xxx 
lion tom    :    tiger lion 
23           :   23
njthzxwz

njthzxwz1#

我的方法是:
将这两列放入另一个具有identity column的表(以标识每一行)
编写一个函数,将文本按字符串拆分(在本例中传递一个空格),如果内置函数高于sql server 2016,则可以在此处使用该函数
将标识和拆分的数据分别获取到列1和列2的两个表中
在col split数据中连接两个表以进行匹配,并获取id
现在查询上面1中表中的数据
这里假设代码是针对sql server 2016的

tquggr8v

tquggr8v2#

在mysql中,您可以对已呈现的数据使用正则表达式:

where column1 regexp replace(column2, ' ', '|') or
      column2 regexp replace(column1, ' ', '|')

这可能有效,也可能无效。例如,这将匹配“lion”和“lions”--这符合我读到的描述。也就是说,如果你有稍微不同的想法,你可以修改模式来强制分词。

wbrvyc0a

wbrvyc0a3#

您可以通过创建一个传递column1和column2值的函数来实现这一点。该函数将执行繁重的任务,检查column1值(由空格分隔的多个单词)是否在column2值中有任何匹配的单词。函数的伪代码应该是这样的-

Function bool IsCol1WordPresentInCol2(varchar2 col1value, varchar2 col2value)

第一步:根据空格拆分col1value得到一系列单词
第二步:根据空格拆分col2value得到一系列单词
步骤3:遍历col1的所有单词的外循环(从步骤1中提取)
第4步:遍历col2的所有单词的内部循环(从第2步提取)
第五步:检查col1和col2单词是否匹配。在任何时候,如果找到匹配项,则从函数返回true;否则就错了。
步骤6:根据这个函数返回的bool值,您将能够在调用逻辑中确定该记录是否满足您的条件。

mepcadol

mepcadol4#

您可以使用instring函数来实现这一点。函数取决于您使用的数据库。下面是问题,

select * from table1 where col1 > col2;

select distinct t1.* from table1 t1
inner join table1 t2
on (instr(substring(t1.col1, instr(t1.col1, ' ') -1), col2) > 0);

相关问题