【问题标题】:MySQL - Need search result of maximum matching letters from a stringMySQL - 需要字符串中最大匹配字母的搜索结果
【发布时间】:2015-01-26 19:07:33
【问题描述】:

您好,我正在编写自己的 MySQL 查询,我需要如下记录的结果。

表格中的单词 - ABC XYZ

我的字符串 - ABC XYZQWER

当我运行如下查询时 -

SELECT * FROM myTABLE where `column` LIKE 'ABC XYZQWER%';

我得到空结果。我知道 MySQL LIKE 匹配字符串的结果。

我需要一种方法来解决这个问题。

我使用 'ABC X' 搜索它 - 它给了我一个正确的结果。

【问题讨论】:

    标签: mysql sql regex select sql-like


    【解决方案1】:

    试试这个:

    SELECT * FROM myTABLE a WHERE 'ABC XYZQWER' LIKE CONCAT(a.column, '%');
    

    【讨论】:

    • 这并没有解决我的问题。我手头有一个词-'ABC XYZQWER',我希望表格中的结果为'ABC XYZ'
    【解决方案2】:

    你可以使用函数LOCATE():

    SELECT `column` 
    FROM myTable
    WHERE LOCATE(`column`, 'ABC XYZQWER') = 1;
    

    只要在名为column的列中有值ABC XYZ,查询的结果至少会是:

    +---------+
    | column  |
    +---------+
    | ABC XYZ |
    +---------+
    

    寻找内在匹配

    使用比较运算符>= 可以在搜索字符串'ABC XYZQWER' 中找到匹配的字符串,如'BC'。所以 WHERE 子句将如下所示:

    WHERE LOCATE(`column`, 'ABC XYZQWER') >= 1;
    

    【讨论】:

    • 这给了我空的结果
    • @D3Systems 我测试了它,它可以在 mysql 上运行。请检查您的数据。
    • @D3Systems 发现错误。 column是mysql的特殊词,所以必须用'`'引用。再试一次。
    • 我使用“列”只是一个例子:) ..我的表中有不同的字段
    【解决方案3】:

    以下是一些示例,说明如何在 SQL 查询中使用 LIKE 子句:

    SELECT * FROM myTABLE where column LIKE 'ABC%';// matches ABCD, ABC D but not DABC
    
    SELECT * FROM myTABLE where column LIKE '%ABC%';// matches any string that contains ABC anywhere in the string eg. DABC, D ABC but not D AB C
    
    for your case you would do something like this:
    SELECT * FROM myTABLE where column LIKE 'ABC XYZ%';
    

    尽管您可以按照此处 (Levenshtein Distance MySQL Function) 的描述应用 Levenshtein 距离搜索,但您将无法进行完美的子字符串搜索。但请注意,这些工作方式与 LIKE 子句略有不同,它根据您为搜索指定的距离为您提供结果。

    然后你可以像这样使用它:

    SELECT * FROM mytable WHERE levenshtein("ABC XYZQWER",column) <= 4 
    

    这将为您提供您正在寻找的结果集;它还会给出属于此范围内的其他单词。

    【讨论】:

    • 我手头有一个词 - 'ABC XYZQWER',我希望表格中的结果为 'ABC XYZ'
    【解决方案4】:

    这是因为您没有具有 QWER 的作品。您实际上是在搜索一个不存在的单词。所以你得到一个零结果。

    例如:

    词:qwertyuiuioo 搜索字符串:qwerty

    select * from table where word like qwerty% 你会得到结果。 % 在您给出的字母之后接受与表中的任何值都不匹配的任意数量的字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多