SQL匹配字符串的第一部分并进行比较

时间:2013-10-02 09:54:03

标签: mysql sql search oracle11g

我使用的是Oracle和MySql,所以如果您对这两个代码都有任何答案,请告诉我们,

问题:

我在一个表中有两列名为:USers

第1列=姓名 第2列= UCNames

此列表包含来自不同来源但部分匹配的名称,如:

名称


Alex 琼斯 Marfex

UCNames


Alex Jonnes Mike Marfex

我想比较两个列并根据以下属性找到匹配项:

首先 4上搜索字母和4 最后一个字并存储在名为 verifiyed

由于

2 个答案:

答案 0 :(得分:0)

这为您提供了字符串中的第一个单词

Substring(Col,1,(Locate (' ',Col + ' ')-1)) First

这将为您提供字符串中的最后一个单词

Reverse(Substring(Reverse(Col), 1,  Locate(' ',Reverse(Col)) - 1)) Last

所以你的比较可能是

Where 
    Substring(Col1,1,( Locate(' ',Col1 + ' ')-1)) 
    = Substring(Col2,1,( Locate(' ',Col2 + ' ')-1))
  And
    Reverse(Substring(Reverse(Col1), 1,  Locate(' ',Reverse(Col1)) - 1))
    = Reverse(Substring(Reverse(Col2), 1,  Locate(' ',Reverse(Col2)) - 1))

我选择了一些似乎更安全的文字,只需要更多的努力就可以做到。如果您确实要保留4个字符,只需将定位符替换为4。

答案 1 :(得分:0)

根据@asantaballa的回答,但使用MySQL SUBSTRING_INDEX函数: -

WHERE SUBSTRING_INDEX(Col1, ' ', 1) = SUBSTRING_INDEX(Col2, ' ', 1)
AND SUBSTRING_INDEX(Col1, ' ', -1) = SUBSTRING_INDEX(Col2, ' ', -1)

或粗略检查前4个字符和后4个字: -

WHERE SUBSTRING(Col1, 1, 4) = SUBSTRING(Col2, 1, 4)
AND SUBSTRING_INDEX(Col1, ' ', -4) = SUBSTRING_INDEX(Col2, ' ', -4)