【发布时间】:2016-05-31 08:44:47
【问题描述】:
嘿,这是我的情况。我有一个 2012 MS SQL 数据库,其中包含以下表格:
-Schedule_2_16_2016
-员工信息
Schedule_2_16_2016 是使用不同的程序创建的,我只能将信息解析出来并将其从 PDF 保存到该数据库中。
Schedule_2_16_2016 表中的员工姓名如下所示:
empName |Date_Started |
-----------------------|-------------|
Barker, Bob | 1/12/2014 |
Gill, Sam Marco | 1/1/2014 |
Scott, Greg D. | 12/14/2014 |
Gates, Bill | 5/19/2014 |
Jobs, Steve | 8/18/2014 |
Allred, Nick E. (Elly) | 7/28/2015 |
Nuc, Ted | 9/18/2015 |
EmployeeInfo 表(由我控制)中的员工姓名如下所示:
empName |FName |LName |
--------------|-------|--------|
Bob Barker | Bob | Barker |
Sam Gill | Sam | Gill |
Greg Scott | Greg | Scott |
Bill Gates | Bill | Gates |
Steve Jobs | Steve | Jobs |
Elly Allred | Elly | Allred |
Ted Nuc | Ted | Nuc |
注意我的版本没有中间名,一些没有像 Schedule_2_16_2016 表那样的昵称。
即使一些姓名不匹配,我如何进行内部联接并找到正确的员工?
我目前使用的MS SQL查询代码是:
SELECT *
FROM [store1234].[dbo].[Schedule_2_16_2016] AS empSchedule
INNER JOIN [store1234].[dbo].[EmployeeInfo] AS empInfo
ON empInfo.empName = empSchedule.empName
WHERE empSchedule.empName LIKE '%Gill, Sam%'
这没有记录应该有记录,但就像我说的,它调用它(在上面的示例中)Sam Gill 而不是 Gill, Same Marco 或 Elly Allred 而不是 Allred, Nick E. (Elly)。
是否有任何类型的 RegEX 或我可以使用的东西,以便在 WHERE 子句中为 any 1 person 将所需的 2 个表组合在一起?
【问题讨论】:
-
这是一次性任务,还是会重复执行?
-
参数'%Gill, Sam%'从何而来?这有什么灵活性吗?
-
@plutonix 再次出现
-
这很复杂,如果你有一百万行这样的行来找到对,我怀疑你能否涵盖所有情况,因为它在很大程度上取决于(非标准化)人工输入。您需要创建很多条件(将 fname+lname 与一行中所有可能的名称匹配)。我可以给出的提示是:标记您发现的每个 EmployeeInfo 看起来像匹配项。恕我直言,您可以创建一个包含某种“不可能”列的关系表,以对您找到该对数据的正确匹配项的概率进行排名
标签: sql sql-server regex vb.net tsql