2013-10-02 28 views
1

我使用Oracle和MySQL,所以如果你有两个代码的任何答案,请让我知道,SQL比赛的第一部分和比较

问题:

我在一个名为表2列:用户

列#1 =名称 柱#2 = UCNames

该列表包含来自不同的来源,但部分地匹配名称类似:

名称


亚历克斯·琼斯Marfex

UCNames


亚历 Jonnes表示麦克Marfex

我想基于以下属性比较列的都找到匹配:

第一 4搜索字母和4个遗言和所谓的新列来存储: verifiyed

感谢

+0

你打算比较什么?两列它自己或另一个变量与这两列 – dcp1986

+1

当检查对最后4个字你的例子不会验证。尽管可以编写一些sql来将其拆分为单词(如果单词只用空格分隔而没有标点符号,则不是主要问题),但是如何在不存在4个单词的情况下处理搜索(或者对于第一个单词部分,没有4首字母)? – Kickstart

回答

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

如果使用MySQL,那么SUBSTRING_INDEX函数将是适当的。 – Kickstart

+0

谢谢,@KickStart。大多数SQL Server用户在这里。根据您的评论进行编辑。 – asantaballa

+1

没问题。 Substring_index返回字符串,所以你不需要使用子字符串。我的SQL Server很差,我的Oracle大约过了6年! – Kickstart

0

基于由@asantaballa的答案找到ES,但使用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)