【问题标题】:SSIS Fuzzy Lookup for datesSSIS模糊查找日期
【发布时间】:2016-07-16 08:55:39
【问题描述】:

我正在尝试使用三个字段匹配客户:FirstName、LastName、Gender 和 DOB。据我了解,SSIS Fuzzy Lookup 仅适用于字符串(在文档中从未见过,只是一些博主这么说)所以在这种情况下,我可以以某种方式使用 DOB 来建立“信心”吗?这个工具如何比较日期?

这里有一个关于这个问题的帖子:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/d2e53f8c-abfc-461e-9263-fd46b95247c0/ssis-fuzzy-lookup-and-dates?forum=sqlintegrationservices

【问题讨论】:

  • Documentation 表示它将对非 STR 列进行精确查找。为什么在进行模糊转换之前不能将 DOB 转换为字符串?
  • 谢谢,我找到了摘录,由于某种原因我在第一次阅读时没有找到:“只有具有DT_WSTR和DT_STR数据类型的输入列才能用于模糊匹配。精确匹配可以使用除 DT_TEXT、DT_NTEXT 和 DT_IMAGE 之外的任何 DTS 数据类型。"
  • @ESG :“为什么我不能转换 DOB”,这将完全违背目的。紧随其后的是我引用的那个线程中的一些人。模糊匹配不会将“one”匹配到“two”,而是可以将“two”匹配到“twoo”或“twi”。它基于距离公式和常见拼写错误以及拼写错误组合。将数字转换为字符串,根本不会做任何事情,因为你永远不会出错。
  • 可以理解。在这种情况下,您最好编写自己的脚本组件来自己加权不同的参数。例如,对于 DOB,我会假设月份+数据值比年份更相关。或者,DOB 列和提供的值之间的天数很重要。在任何一种情况下,脚本组件都可能为您提供最大的灵活性。
  • @ESG 这也是一个非常好的建议(使用权重) - 我将尝试编写脚本。谢谢!

标签: sql-server ssis fuzzy-search fuzzy-comparison


【解决方案1】:

我进行了很多姓名/出生日期搜索,但很难找到正确的答案。您可以考虑使用类似于下面的功能进行排序。这基本上需要两个 8 位日期 (YYYYMMDD) 并计算未匹配数字的数量。

例如,这些日期对有 1 个不匹配的数字:

  • 1976-10-20 和 1976-01-20(10 对 01)
  • 1976-10-20 和 1975-10-20(76 对 75)

根据处理的数据量,这有利于排序(也就是将最佳匹配放在首位),但不适用于过滤(因为不涉及索引)。

ALTER FUNCTION dbo.BirthDateRank ( @DOB1 DATE, @DOB2 DATE )
RETURNS INT
AS
    BEGIN
        -- 10/31/2016 --> 10312016
        DECLARE @xDOB1 VARCHAR(10) = REPLACE(CONVERT(CHAR(10), @DOB1, 101), '/', '');
        DECLARE @xDOB2 VARCHAR(10) = REPLACE(CONVERT(CHAR(10), @DOB2, 101), '/', '');

        DECLARE @i INT = 0;
        DECLARE @iRet INT = 0;

        WHILE @i <= LEN(@xDOB1)
        BEGIN
            SET @iRet = @iRet + CASE WHEN SUBSTRING(@xDOB1, @i, 1) = SUBSTRING(@xDOB2, @i, 1) THEN 0 ELSE 1 END

            SET @i = @i + 1
        END

        RETURN @iRet;

    END;
GO

【讨论】:

  • 非常感谢,这是一个非常好的建议。但是,我正在尝试跟踪该函数以查看它的作用;所以这会返回不匹配的位数?例如:1945-02-23 和 1944-03-23 返回 2,因为 45 与 44 有一个不匹配,而 02 与 03 有另一个不匹配?谢谢!
  • 你明白了!请记住,这最适合对较小的数据集进行排序,而不是对数百万行进行排序。
  • 抱歉不知道为什么我之前没有选择最佳答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多