DB2/C# 查询和字符串的乐趣 - 构建查询的问题

DB2/C# Fun with queries and strings - Problems building query

我的任务是迄今为止似乎不可能完成的任务,但我希望有人更擅长 sql 查询,然后我可以解决这个问题(如果可能的话)。我在从 table 查询数据时遇到问题。问题的根源是我被迫查询姓名和出生日期。出生日期有效,不在我的问题范围内。我的目标是使用源(excel 报告)和目标(数据库)中的公共值进行查询,这就是姓氏。

字段:姓名 1、姓名 2 Table: 参与者

数据库中的 Name2 包含姓氏,但如果此人使用中间名或后缀,它也包含这些值。来源(报告)大部分只包含姓氏,但有时也有少量中间名也混入姓氏。我的目标是从数据库查询以及报告姓氏字符串中删除中间名和后缀。

来自数据库: 我需要去掉 name2 字段中姓氏左侧的中间名。它们由 space 分隔。如果后缀存在于姓氏之后,我还需要去除后缀。

来自报告: 我需要去掉中间名,它位于姓氏的左侧,由 space 分隔。这将在 c#

中完成

如果我可以提供更多信息来帮助回答,请告诉我。

我对查询部分的第一个猜测是进行通配符搜索,我将从报告中获取姓氏并使用(如“%%”)查询 table。我认为这将获得我在搜索中寻找的记录,但我不确定它的效果如何。

正如 John Clifford 所建议的那样,您可以像这样使用拆分来获取姓氏(伪代码):

// If the string contains a space, split it
string surname = Name2;
int spacePos = surname.IndexOf(" ");
if (spacePos > 0)
{
    string[] words = surname.Split(' ');
    surname = words[1];
}

或者你可以找到 space,然后得到一个子字符串:

int spaceTruckin = Name2.IndexOf(" ");
string surname = Name2.Substring(spaceTruckin);

我有一个类似的 table,带有...集成 'last name'。

我最终编写了一个尽其所能的 UDF,但仍然有一些情况我没有编码,但有时会弹出。我在 ILE RPG 中编写了我的 UDF。与大多数数据库不同,DB2 for i 允许我编写 HLL 并将其简单地注册为 UDF。我提到这一点是因为 IBM 方面的开发人员可能已经编写了拆分名称部分的代码——他们现在需要做的就是制作一个 UDF。那么你可以

select getLast(combinedName) from ...