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