SSIS模糊查找日期

时间:2016-03-29 00:37:21

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

我正在尝试使用三个字段匹配客户端:FirstName,LastName,Gender和DOB。我的理解是SSIS模糊查找仅适用于字符串(在文档中从未见过,只有一些博主说过)所以在这种情况下,我能以某种方式使用DOB构建"信心"?该工具如何比较日期?

以下是此问题的主题:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/d2e53f8c-abfc-461e-9263-fd46b95247c0/ssis-fuzzy-lookup-and-dates?forum=sqlintegrationservices

1 个答案:

答案 0 :(得分:2)

我做了很多名字/ DOB搜索,而且很难做对。您可以考虑使用类似于下面的功能进行排序。这将基本上采用两个8位数日期(YYYYMMDD)并计算未匹配数字的数量。

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

  • 1976-10-20和1976-01-20(10 vs 01)
  • 1976-10-20和1975-10-20(76 vs 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