如何在编写查询时处理用户输入拼写错误?

时间:2018-03-15 15:27:30

标签: sql sql-server

在我的数据库中,我有一些城市和状态(似乎是)存储在用户输入中。我试图只获得不同的位置,所以我的查询看起来像这样:

SELECT Distinct C.City, C.State FROM Customers C

我遇到的问题是有些城市有拼写错误,所以在我的搜索结果中可能会有"达拉斯" TX," Dalas" TX,"达拉斯," TX,等等。有没有办法过滤"正确"拼写而不必排序一万行?

2 个答案:

答案 0 :(得分:1)

嗯,这似乎是个大问题。如果您有邮政编码,则可以丰富数据。但从你的问题来看,情况并非如此。

我认为您可以导入具有唯一州和城市的表格,并将此表格加入到您的表格中。可以检查和更新不匹配的行。虽然工作仍然很糟糕。

祝你好运。

答案 1 :(得分:0)

你应该解决你的设计问题,存储自由文本的城市和州往往会产生问题......好吧,就像这样。如果你可以解决这个设计问题,那么......如果你被迫使用它,那么我担心你会有一些手工乐趣。

创建一个表格为city,state,equivlent_city,equivlent_state

从表格中选择城市/州的所有不同值,然后将其导出到电子表格中(复制和粘贴也可以)。浏览这个电子表格中的每一行,并为每个城市状态分配正确的拼写,你希望它出现在...... ya,这可能是一个漫长乏味的过程(上次我这样做,我把这个奇妙的任务委托给了夏天学生们)。完成后,将电子表格作为表格导入数据库。无论何时您需要从事实表中引用城市/州,请加入此城市和州的转换表,然后在您的查询中引用equivalent_city和equivalent_state。

此方法的优势在于,当您的用户找到拼写城市的新方法时,这个翻译表会逐渐增加(您将需要一个流程来继续使用新的拼写更新此表格)....螺旋上限有一个上限在那里拼写,你最终会抓住他们中的大多数。缺点是维持设置(并且不相信即使你认为你已经捕获了达拉斯tx的所有拼写,一些用户将输入' Daalass tex')。

备注在评论中说明,更好的设计可以防止需要这种可怕的解决方案。