日期的 SSIS 模糊查找

SSIS Fuzzy Lookup for dates

我正在尝试使用三个字段匹配客户:名字、姓氏、性别和出生日期。据我了解,SSIS 模糊查找仅适用于字符串(在文档中从未见过,只是一些博主这么说)所以在这种情况下,我可以以某种方式使用 DOB 来构建 "confidence" 吗?该工具如何比较日期?

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

我进行了很多 Name/DOB 次搜索,但真的很难做到正确。您可以考虑使用类似于下面的函数进行排序。这基本上需要两个 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