【问题标题】:Mysql - Calculate soundex difference between two stringsMysql - 计算两个字符串之间的soundex差异
【发布时间】:2013-09-04 08:04:43
【问题描述】:

我有一些歌曲名称和它们预先计算的 soundex 存储在一个 mysql 表中。我想将用户输入的 soundex 与预先计算的 soundex 进行比较。并按照用户输入和歌曲名称的差值升序获取结果。

我尝试了以下查询(在 java 中):

String query="SELECT * FROM song ORDER BY STRCMP(pre_calculated_soundex,SOUNDEX("+user_input+")) ASC ";

但是 strcmp 只返回 1,0 或 -1。所以排序不正确。

也试过WHERE pre_calculated_soundex=SOUNDEX(user_input),但这只是返回完全匹配的声音。

【问题讨论】:

  • 你能准确描述一下“差异”是什么意思吗?
  • @Aioros 好像区别是在MSSQL服务器中实现的。
  • 根据文档, DIFFERENCE 返回两个字符串的 SOUNDEX 中相同的字符数。在 MySQL 查询中实现这将是相当复杂的。您最好编写一个存储过程或用您的编程语言管理它。

标签: mysql soundex


【解决方案1】:

完全低技术含量,假设仅使用 soundex 函数的前四个字符,并假设“aaaa”是用户输入

  SELECT * 
FROM   song 
ORDER  BY Substr(pre_calculated_soundex, 1, 1) = 
                    Substr(Soundex("aaaa"), 1, 1) 
                                                 + Substr(pre_calculated_soundex 
                    , 2, 1) = 
                    Substr 
                    (Soundex("aaaa"), 2, 1) 
                    + Substr(pre_calculated_soundex, 3, 1) 
                    = Substr(Soundex("aaaa"), 3, 1) 
                      + Substr(pre_calculated_soundex, 4, 1 
                      ) 
                      = Substr(Soundex("aaaa"), 4, 1) 

【讨论】:

  • 非常感谢这个想法,因为它给了我方向。对此还有一个问题:在您的查询中将调用 soundex 函数多少次?它乐观地假设它应该只为相同的输入调用一次? Question Link
  • 我刚刚回复了您的其他查询,但只是指出解决方案,答案是肯定的,mysql 调用了 4 次,为了避免它,您进行了子查询,详细答案请参见上面链接的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2017-06-13
相关资源
最近更新 更多