【发布时间】:2017-09-07 16:39:07
【问题描述】:
我当前的 SQL 查询是:
Select
A.CFCIF#, B.CIFNO, B.SNAME, A.CFSNME
From dbo.tbl_CIF_Master A
Left Join dbo.tbl_Loan_Master B
On A.CFCIF# = B.CIFNO
Where
B.[STATUS] not in (2,8)
--and CONTAINS (A.CFSNME or FORMSOF (THESAURUS, B.SNAME)) --doesn't work.
I'm not an admin so I can't design thesaurus mappings
and B.SNAME LIKE '%' + A.CFSNME + '%' -- works but no results which can't
be accurate
这运行良好,但没有发现任何差异,正如我使用 LIKE 所指出的那样。正如我所指出的那样,使用 THESAURUS 的行被注释掉了……我在两个“名称”字段 SNAME 和 CFSNME 中发现的细微差异的一个例子是细微的差异,例如在 LLC 或 Robert 缩写为 Rob 之前缺少逗号。
【问题讨论】:
-
感谢您的洞察力。我正在使用 Microsoft SQL Server 2012 R2
-
您认为您的一列比另一列更正确吗?
-
任一列在任何情况下都可能不正确,因此我必须识别并记录所有差异。我只有 Management Studio/SQL,没有能力创建函数来开发“答案”。看起来很“糟糕”,因为似乎有多个“编程”解决方案。
-
没有我能想到的直接通用的方法来执行此操作。解决方案的复杂程度取决于您的数据。例如,Richard 或 Margaret 是否会缩写为 Dick 或 Peggy? LTD和Limited怎么样?我会考虑首先拉出一组不同的
SNAME和CFSNME,左加入SNAME的85% 位于CFSNME中,反之亦然(其中超过5 个字符)。查看匹配并迭代地构建逻辑以实现更稳健的匹配,但这假设您的数据有很多很多事情。您的数据有多大? -
每列只有大约 13,000 行。到目前为止,我的抽样证明差异会更加微妙,这可能会使这变得困难。在像 Parsons, Micah M vs Parsons, Micah M. Ditto 这样的中间首字母之后没有句号,对于商业客户来说 - 可能在“LLC”之前缺少逗号,比如 ABC Materials LLC,它也可以在另一列中显示为 ABC Materials, LLC。跨度>
标签: sql sql-server tsql sql-like