【问题标题】:SQL match first part of string and compareSQL 匹配字符串的第一部分并进行比较
【发布时间】:2013-10-08 16:19:14
【问题描述】:

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

问题:

我在一个名为 USers 的表中有 2 列

Column#1= 名称 Column#2= UCNames

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

名字


亚历克斯琼斯 Marfex

UCNames


亚历克斯乔内斯·迈克 Marfex

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

first 4 上搜索 letters 和 4 个last words 并存储在名为:verifyed 的新列中>

谢谢

【问题讨论】:

  • 你要比较什么?它自己的两列或具有这两列的另一个变量
  • 当检查最后 4 个单词时,您的示例无法验证。虽然可以编写一些 sql 将其拆分为单词(如果单词仅由没有标点符号的空格分隔,则不是主要问题),但是当没有 4 个单词(或第一个单词)时,您希望如何处理搜索部分,没有4个首字母)?

标签: mysql sql search oracle11g


【解决方案1】:

基于@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)

【讨论】:

    【解决方案2】:

    这会给你字符串中的第一个单词

    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 个字符,只需将 Locate 替换为 4。

    【讨论】:

    • 如果使用 MySQL,那么 SUBSTRING_INDEX 函数将是合适的。
    • 谢谢,@KickStart。这里主要是 SQL Server 用户。根据您的评论进行编辑。
    • 没问题。 Substring_index 返回字符串,因此您也不需要使用 substring。我的 SQL Server 很差,我的 Oracle 已经过时了大约 6 年!
    • 再次感谢。更改为 Locate then 它看起来相当于 CharIndex。
    猜你喜欢
    • 2020-12-06
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    相关资源
    最近更新 更多