嘿所有这是我的情况。我有一个2012 MS SQL数据库,其中包含以下表格:
-Schedule_2_16_2016
-EmployeeInfo
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 子句中为任何1个人组合所需的2个表?
答案 0 :(得分:0)
你的SQL应该是这样的,但是除非你解决所有可能的条件,否则你无法保证得到正确的结果。
id2
答案 1 :(得分:0)
由于EmployeeInfo
未在表格中包含该字段,因此不确定您计划如何处理中间名称,但这会使empSchedule.empName
中的昵称为 / strong>它们所有括在括号中和与您的示例数据匹配empInfo.FName
:
SELECT *
FROM [dbo].[Schedule_2_16_2016] AS empSchedule,
[dbo].[EmployeeInfo] AS empInfo
WHERE
CHARINDEX(empInfo.LName + ', ' + empInfo.FName, empSchedule.empName) = 1
UNION
SELECT *
FROM [dbo].[Schedule_2_16_2016] AS empSchedule,
[dbo].[EmployeeInfo] AS empInfo
WHERE
CHARINDEX(empInfo.LName + ', ', empSchedule.empName) = 1
AND
(STUFF(
STUFF(
empSchedule.empName,
CHARINDEX(')', empSchedule.empName),
LEN(empSchedule.empName), ''),
1,
CHARINDEX('(', empSchedule.empName), '')
) = empInfo.FName;
答案 2 :(得分:0)
你可以试试这个: -
{{1}}