我可以使MySQL SELECT LIKE语法更智能吗?

时间:2011-12-08 22:49:22

标签: mysql

我注意到LIKE'a%'会以'árbol'返回结果,但LIKE'AE%'不会返回“Æther”之类的结果。 LIKE聪明的程度是多少?假设我有这些数据库条目:

Black Blue
Black Blew

有没有办法让MySQL与LIKE'Black Bleu'巧妙地匹配(因为它们非常接近)?或者LIKE'_%'只能匹配确切的字符,具有上述异常?

3 个答案:

答案 0 :(得分:4)

MySQL的全文搜索非常有限,因为它是一个数据库,而不是一个搜索引擎。

你应该研究像Apache Solr这样的东西,它支持各种各样的事情,比如“听起来像”匹配,干扰(即“聪明”和“智能”是相同的)等等。

答案 1 :(得分:2)

另一个选择是使用SOUNDEX或SOUNDS LIKE运算符

http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#operator_sounds-like

http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_soundex

mysql> SELECT SOUNDEX('Blue'), SOUNDEX('Blew'), SOUNDEX('Blue') = SOUNDEX('Blew');
+-----------------+-----------------+-----------------------------------+
| SOUNDEX('Blue') | SOUNDEX('Blew') | SOUNDEX('Blue') = SOUNDEX('Blew') |
+-----------------+-----------------+-----------------------------------+
| B400            | B400            |                                 1 |
+-----------------+-----------------+-----------------------------------+
1 row in set (0.00 sec)

答案 2 :(得分:0)

不确定MySQL,但在SQL Server上,正则表达式是你的朋友

SELECT * FROM Table WHERE Field LIKE 'Black Bl[e|u]%'

假设你想要匹配'相似'的拼写,而不是两个单词听起来相同的事实:)