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

DB2/C#查询和字符串的乐趣-构建查询的问题,c#,string,db2,ibm-midrange,C#,String,Db2,Ibm Midrange,到目前为止,我的任务似乎是不可能的,但我希望sql查询方面比我更好的人能够在可能的情况下解决这个问题。我在查询表中的数据时遇到问题。问题的根源是我不得不查询姓名和出生日期。出生日期有效,不在我的问题范围之内。我的目标是使用源(excel报表)和目标(数据库)中的公共值进行查询,这就是姓氏 字段:名称1,名称2 表:参与者 数据库中的Name2包含姓氏,但如果此人使用中间名或后缀,则也包含这些值。大多数情况下,源(报告)只包含姓氏,但有时也有少量中间名混入姓氏中。我的目标是从数据库查询和报表姓氏字

到目前为止,我的任务似乎是不可能的,但我希望sql查询方面比我更好的人能够在可能的情况下解决这个问题。我在查询表中的数据时遇到问题。问题的根源是我不得不查询姓名和出生日期。出生日期有效,不在我的问题范围之内。我的目标是使用源(excel报表)和目标(数据库)中的公共值进行查询,这就是姓氏

字段:名称1,名称2 表:参与者

数据库中的Name2包含姓氏,但如果此人使用中间名或后缀,则也包含这些值。大多数情况下,源(报告)只包含姓氏,但有时也有少量中间名混入姓氏中。我的目标是从数据库查询和报表姓氏字符串中去掉中间名和后缀

从数据库: 我需要在name2字段中去掉姓左边的中间名。它们被一个空格隔开。如果后缀位于姓氏之后,我还需要去掉后缀

从报告中可以看出: 我需要去掉姓左边的中间名,中间名用空格隔开。这将在c语言中完成#

请让我知道,如果我可以提供任何更多的信息来帮助回答


我对查询部分的第一个猜测是执行通配符搜索,在该搜索中,我将从报表中获取姓氏,并使用一个(如“%”查询表。我想这将获得我在搜索中寻找的记录,但我不确定它会有多好的效果

正如John Clifford所建议的,您可以使用类似拆分的方式(伪代码)获取姓氏:

或者您可以找到空间,然后获得子字符串:

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

正如约翰·克利福德(John Clifford)所建议的,您可以使用类似拆分的方式(伪代码)获取姓氏:

或者您可以找到空间,然后获得子字符串:

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

我有一张类似的桌子,上面有一个。。。集成“姓氏”

我最后写了一个UDF,它尽了最大的努力,但仍然有一些情况我没有编码,不时弹出。我用ILERPG写了我的UDF。与大多数数据库不同,DB2fori允许我在HLL中编写,并将其注册为UDF。我之所以提到这一点,是因为IBM方面的开发人员可能已经编写了拆分名称部分的代码——他们现在需要做的就是生成一个UDF。那你就可以

select getLast(combinedName) from ...

我有一张类似的桌子,上面有一个。。。集成“姓氏”

我最后写了一个UDF,它尽了最大的努力,但仍然有一些情况我没有编码,不时弹出。我用ILERPG写了我的UDF。与大多数数据库不同,DB2fori允许我在HLL中编写,并将其注册为UDF。我之所以提到这一点,是因为IBM方面的开发人员可能已经编写了拆分名称部分的代码——他们现在需要做的就是生成一个UDF。那你就可以

select getLast(combinedName) from ...

您不能检索整个字段,然后使用String的split方法在空格上拆分它吗?(对于C#部分,仍在考虑查询)除了连接报表和数据库中的相应行之外,还需要做什么?如果您只需要这样做,并且报告中的姓氏字段始终是数据库中姓氏字段的子集,那么我认为您在最后一段中建议的方法将是最佳选择。这是一个非常常见但非常困难的问题。有一些软件包专门用于处理混乱的真实数据。如果你有胃口,你可以自己滚。(是的,这很难看,有很多特殊情况和神奇常数。)最终,我认为您不会得到一个直接链接数据源的“干净”查询。您很可能需要为一个或两个数据源构建单独的清理版本,然后查询清理后的数据。(清理后的数据也不完美,但应该足够接近。)请不要忘记投票支持我的问题。谢谢您不能检索整个字段,然后使用String的split方法在空格上拆分它吗?(对于C#部分,仍在考虑查询)除了连接报表和数据库中的相应行之外,还需要做什么?如果您只需要这样做,并且报告中的姓氏字段始终是数据库中姓氏字段的子集,那么我认为您在最后一段中建议的方法将是最佳选择。这是一个非常常见但非常困难的问题。有一些软件包专门用于处理混乱的真实数据。如果你有胃口,你可以自己滚。(是的,这很难看,有很多特殊情况和神奇常数。)最终,我认为您不会得到一个直接链接数据源的“干净”查询。您很可能需要为一个或两个数据源构建单独的清理版本,然后查询清理后的数据。(清理后的数据也不完美,但应该足够接近。)请不要忘记投票支持我的问题。谢谢中间的名字/后缀让我很烦恼。如果字段只包含由空格分隔的1-3个字符串,那么实际上没有办法区分中间名和后缀。我想你必须计算空格来确定它。当然,基于所有不同的可能性(Edgar Hoover、Edgar Hoover、esquire等),或者如果数据不一致,例如“Edgar Hoover、esq”(没有第二个空格),这可能会变得复杂。我想象的问题是,你可能有“姓氏后缀”或“中间名姓氏”,它们有相同数量的空格。我想如果后缀有逗号或句号之类的话,就更容易找出哪个是哪个。@B.ClayShannon you ha