代码之家  ›  专栏  ›  技术社区  ›  Mat

类似于SQL的“%value%”的反转

  •  5
  • Mat  · 技术社区  · 16 年前

    我有一个包含域名的mysql表:

    +----+---------------+
    | id | domain        |
    +----+---------------+
    |  1 | amazon.com    |
    |  2 | google.com    |
    |  3 | microsoft.com |
    |    |     ...       |
    +----+---------------+
    

    我希望能够在这个表中搜索完整的主机名(即“www.google.com”)。如果是另一种情况,表中包含了我要使用的完整URL:

    SELECT * FROM table WHERE domain LIKE '%google.com%'
    

    但反过来就不那么简单了。我目前的想法是搜索完整的主机名,然后逐步去掉域的每个部分,然后再次搜索。(即搜索“www.google.com”,然后搜索“google.com”)。

    这不是特别有效或聪明,必须有更好的方法。我相信这是一个常见的问题,而且无疑很容易解决!

    3 回复  |  直到 9 年前
        1
  •  14
  •   Greg    16 年前

    您也可以使用右边的列:

    SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain);
    

    SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain, '%');
    

    它不是特别有效,但它起作用。

        2
  •  2
  •   Sabyasachi Mishra    9 年前

    mysql 可以使用正则表达式( RLIKE )进行匹配。考虑到这种能力,你可以这样做:

    SELECT * FROM table WHERE 'www.google.com' RLIKE domain;
    

    看来是这样 似的 已经实现,它甚至足够智能,可以处理该字段中的点(通常是 regex )作为一个文字点。

    MySQL's 包含正则表达式使您能够非常强大地分析和搜索字符串。如果您想了解更多关于正则表达式的信息,只需谷歌 正则表达式 “。您还可以使用以下链接之一:

    http://en.wikipedia.org/wiki/Regular_expression

    http://www.regular-expressions.info/

    http://www.codeproject.com/KB/string/re.aspx

        3
  •  0
  •   Radu094    16 年前

    您可以使用一些SQL字符串操作来生成等效的string.endsWith():

    SELECT * FROM table WHERE  
    substring('www.google.com',
    len('www.google.com') - len([domain]) ,
    len([domain])+1) = [domain]