【问题标题】:Differentiating between two similar entries in SQL Server based on special characters根据特殊字符区分 SQL Server 中的两个相似条目
【发布时间】:2017-01-18 22:51:34
【问题描述】:

我在 SQL Server 中的表有一些如下所示的条目。

2934046 Kellogg’s Share Your Breakfast  74672   2407522 Kellogg?s Share Your Breakfast  ACTIVE  2015-09-01  9999-12-31

2934046 Kellogg?s Share Your Breakfast  74672   2407522 Kellogg?s Share Your Breakfast  ACTIVE  2015-09-01  9999-12-31

另一个例子是

2939508 UOL Ação Social 81534   1527484 UOL Ac?o Social ACTIVE  2015-09-01  9999-12-31
2939508 UOL Ac?o Social 81534   1527484 UOL Ac?o Social ACTIVE  2015-09-01  9999-12-31

可以看出,两个条目是相同的,除了第二个条目中的问号字符。即使我做了类似的事情

SELECT DISTINCT * from my_table

没用。我必须想办法根据特殊字符删除此类重复条目。我的经理说带问号的条目基本上是坏数据,我应该删除它们。有谁知道怎么做?

【问题讨论】:

  • 解决这个问题的真正方法是避免损坏包含非 ASCII 字符的记录。

标签: sql-server unicode ascii


【解决方案1】:

我今年在数据加载活动期间遇到了同样的问题,但我的经理提示我使用 SSIS 模糊分组转换来查找相同的记录。请创建小型 SSIS 包,添加数据流任务。内部数据流任务添加(来源+模糊分组+目的地)。

访问 - 添加模糊组变换以识别重复项 https://msdn.microsoft.com/en-us/library/jj819770(v=sql.120).aspx

【讨论】:

    【解决方案2】:

    您可以实现 damerau-levenshtein 算法,该算法评估两个字符串在 clr 项目中的相似程度并将其用于 t-sql。

    您可以对数据进行试验以找到合适的阈值,以便接受两个字符串作为重复项。

    可以在此处找到算法实现的 c# 示例:

    Damerau - Levenshtein Distance, adding a threshold

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      相关资源
      最近更新 更多