3

每个人都知道“=”符号。

SELECT * FROM mytable WHERE column1 = column2;

但是,如果我在 column1 和 column2 中有不同的内容……但它们非常相似怎么办?(可能有一个空格,或者有一个不同的词)。

是否有可能:

SELECT * FROM mytable WHERE ....column matches column2 with .4523423 "Score"...

我相信这叫做模糊匹配?还是模式匹配?这是它的技术术语。

编辑:我知道 Soundex 和 Levenstein 的距离。这是你推荐的吗?

4

2 回答 2

5

您要查找的内容称为Levenstein distance。它为您提供了描述两个字符串之间差异的数值。

在 MySQL 中,您必须为此编写存储过程。是可能有帮助的文章。

于 2009-10-15T19:18:34.647 回答
0

Lukasz Lysik 发布了对可以从数据库内部进行模糊匹配的存储过程的引用。如果您希望将此作为一项持续的任务,那是您最好的选择。

但是,如果您想将其作为一次性任务执行,并且您可能想要进行复杂的检查,或者您想要做一些复杂的事情来清理模糊匹配,您可能想要在 Python 中进行模糊匹配. (您的标签之一是“python”,所以我假设您对 Python 解决方案持开放态度......)

使用 Python ORM,您可以获得一个 Python 列表,其中每个数据库行一个对象,然后使用 Python 的全部功能来分析您的数据。您可以使用正则表达式、Python Levenstein 函数或其他任何东西。

Python 的全能最佳 ORM 可能是SQLAlchemy。实际上,我更喜欢Django的 ORM 。它有点简单,我重视简单。如果您的 ORM 需求并不复杂,那么 Django ORM 可能是一个不错的选择。如果有疑问,就去 SQLAlchemy。

祝你好运!

于 2009-10-15T19:28:19.073 回答