【问题标题】:How to query soundex() in mysql如何在 mysql 中查询 soundex()
【发布时间】:2015-04-13 04:52:45
【问题描述】:

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

select soundex('str');

只是不确定如何将其包含在我的查询中。

【问题讨论】:

  • where soundex("search_string") = soundex(search_column)
  • 你可以在这里看到一个例子stackoverflow.com/questions/24250267/…
  • 我已经尝试过你的建议 pala_ 没有运气;它不返回任何结果。我一直在搜索 soundex() 代码,例如,'Lewis' 的 soundex() 代码是 soundex(L200)。我假设我使用 soundex() 代码而不是文本进行搜索,否则这会破坏首先为 soundex() 提供代码的目的。

标签: mysql soundex


【解决方案1】:

如果您要针对people 表的name 字段搜索“lewis”,请执行以下查询:

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

example here

【讨论】:

  • 成功了,谢谢。但是为什么会有 soundex() 代码,例如选择声音('刘易斯')?
  • 它正在为搜索词以及与之比较的字段生成代码。例如soundex("lewis") = L200soundex("luis") = L200。所以soundex("lewis") = soundex("luis") 匹配,而"lewis" = "luis" 显然不会。英语中“发音相同”的词通常应该有相同的代码。
  • 啊,非常感谢;我一直在努力解决这个问题。
【解决方案2】:

很明显,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 ')), '%')

这个“有点”有效

【讨论】:

    【解决方案3】:

    这应该可以工作

    select * from table_name where soundex(column_name) = soundex('word');
    

    这是阅读这些内容的好地方:http://www.postgresonline.com/journal/archives/158-Where-is-soundex-and-other-warm-and-fuzzy-string-things.html

    【讨论】:

      【解决方案4】:

      MySQL 现在有一种本地方式来执行此操作!

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

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

      相当于:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-08
        • 2015-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多