我有一个表,其中一列有记录,只是它们的书写方式不同。那么,我如何找到它们并将相应的id保存在新表中呢?
我在城市一栏中有以下记录。
Id name
1 berlin
2 ber lin
3 ber-lin
4 Berlin
5 Hamburg
6 New York
7 NewYork
字符串
所以我的第一个假设是删除任何特殊字符,包括白色,然后小写。看看谁匹配,然后将id写入新表?
什么是最好的和最可靠的方法来找到machtes?
我有一个表,其中一列有记录,只是它们的书写方式不同。那么,我如何找到它们并将相应的id保存在新表中呢?
我在城市一栏中有以下记录。
Id name
1 berlin
2 ber lin
3 ber-lin
4 Berlin
5 Hamburg
6 New York
7 NewYork
字符串
所以我的第一个假设是删除任何特殊字符,包括白色,然后小写。看看谁匹配,然后将id写入新表?
什么是最好的和最可靠的方法来找到machtes?
3条答案
按热度按时间xriantvc1#
如果删除一些字符(示例中的' '和'-')和小写字母足以识别重复:
字符串
SQL小提琴
translate()
在替换(或删除)单个字符列表时特别有用。使用
CREATE TABLE AS
根据查询结果创建新表。相关信息:
bhmjp9jg2#
这当然可以优化,但它的工作原理:
字符串
t3psigkw3#
在我看来,你是在尝试低edit distance。当我在处理低质量的手动输入的数据时遇到类似的问题时,我使用了一个“正确”的地名列表(在示例数据中可能是“纽约”),然后使用所有错误数据行和所有正确名称的交叉连接,计算每个配对的编辑距离,并将每个配对的最小值作为“匹配”。
PostgreSQL在其fuzzystrmatch库中包含Levenshtein编辑距离函数,正如其他人所提到的那样。
编辑:这里有一些代码,假设
cities
包含帖子中的数据,normalized_cities
包含(HAMBURG, BERLIN, NEWYORK)
,根据后面的评论:字符串