如何在MySQL中查询soundex()函数

5
什么是使用soundex()在MySql中进行搜索的正确结构?我知道如何生成一个soundex():
select soundex('str');

我不确定如何在我的查询中包含这个内容。


where soundex("search_string") = soundex(search_column) - pala_
你可以在这里看到一个例子:http://stackoverflow.com/questions/24250267/mysql-search-results-for-similar-sounds/24250438#24250438 - M Khalid Junaid
我已经尝试了您的建议pala_,但没有成功;它没有返回任何结果。我一直在使用soundex()代码进行搜索,例如,'Lewis'的soundex()代码是soundex(L200)。我假设我应该使用soundex()代码进行搜索,而不是文本,否则这将违背soundex()代码的初衷,对吧。 - jimmytiler
4个回答

7

如果你想在people表的name字段中搜索"lewis",则执行以下查询:

SELECT *
FROM people
WHERE soundex("lewis") = soundex(name);

点击此处查看示例


好的,谢谢。但是为什么还有一个soundex()代码呢,比如SELECT SOUNDEX('Lewis')? - jimmytiler
1
它会生成用于搜索词和比较字段的代码。例如,soundex("lewis") = L200soundex("luis") = L200。因此,soundex("lewis") = soundex("luis") 匹配,而 "lewis" = "luis" 显然不匹配。在英语中“听起来相同”的单词通常应具有相同的代码。 - pala_
啊,太感谢了!我已经尝试很长时间想解决这个问题了。 - jimmytiler

3

显然,soundex并不适用于这种部分匹配的情况(例如:SELECT SOUNDEX('house cleaning'), SOUNDEX('house')将无法匹配),但如果您想执行一个恶心的SOUNDEX LIKE,那么可以这样做。

SELECT * FROM tablename WHERE SOUNDEX(column) LIKE CONCAT(SOUNDEX('partial_string'), '%')

您也可以这样做

SELECT * FROM tablename WHERE SOUNDEX(column) LIKE CONCAT(TRIM(TRAILING '0' FROM SOUNDEX('hows ')), '%')

这有点有效。

1

0

MySQL现在有一种本地方法可以做到这一点!

您可以使用语法SOUNDS LIKE进行相似性搜索。

SELECT * FROM table Where SOUNDEX(`field1`) = SOUNDEX(`field2`);

等同于:

SELECT * FROM table Where `field1` SOUNDS LIKE `field2`;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接