SQL LIKE '%value%' 的逆
Posted
技术标签:
【中文标题】SQL LIKE \'%value%\' 的逆【英文标题】:Inverse of SQL LIKE '%value%'SQL LIKE '%value%' 的逆 【发布时间】:2008-12-03 21:18:42 【问题描述】:我有一个包含域名的 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”)
这不是特别有效或聪明,必须有更好的方法。我确信这是一个普遍的问题,而且毫无疑问很容易解决!
【问题讨论】:
【参考方案1】:您也可以使用右边的列:
SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain);
或
SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain, '%');
它不是特别有效,但很有效。
【讨论】:
善或恶……它们都是不错的选择。 酷。我曾考虑将 % 与列名放在一起,但不知道如何像这样连接。谢谢。 哦,非常喜欢。我已经找了很长时间了。 :) 上帝保佑你。【参考方案2】:在mysql
中,您可以使用正则表达式 (RLIKE
) 来执行匹配。鉴于此能力,您可以执行以下操作:
SELECT * FROM table WHERE 'www.google.com' RLIKE domain;
似乎RLIKE
的实现方式已经足够聪明,可以将该字段中的点(通常是regex
中的通配符)视为文字点。
MySQL's
包含正则表达式为您提供了非常强大的解析和搜索字符串的能力。如果您想了解更多关于正则表达式的信息,只需 google “regex
”。您也可以使用以下链接之一:
http://en.wikipedia.org/wiki/Regular_expression
http://www.regular-expressions.info/
http://www.codeproject.com/KB/string/re.aspx
【讨论】:
【参考方案3】:您可以使用一些 SQL 字符串操作来生成等效的 string.EndsWith():
SELECT * FROM table WHERE
substring('www.google.com',
len('www.google.com') - len([domain]) ,
len([domain])+1) = [domain]
【讨论】:
以上是关于SQL LIKE '%value%' 的逆的主要内容,如果未能解决你的问题,请参考以下文章
PHP SQL SELECT sum(value) WHERE x LIKE '%$month%' (foreach)
如何在 Jquery 中搜索数组,如 SQL LIKE value% 语句 [重复]