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

时间:2016-03-09 16:08:28

标签: c# string db2 ibm-midrange

我已经完成了迄今为止看起来不可能的任务,但我希望有人能更好地进行SQL查询,然后我可以解决这个问题。我在查询表中的数据时遇到问题。问题的根源是我被迫查询姓名和出生日期。出生日期有效,超出了我的问题范围。我的目标是使用源(excel报告)和目标(数据库)中的常用值进行查询,这就是姓氏。

字段:Name1,Name2 表:参与者

数据库中的Name2包含姓氏,但如果此人使用中间名或后缀,则它还包含这些值。大多数情况下,源(报告)仅包含姓氏,但有时也会将少量中间名称混合到姓氏中。我的目标是从数据库查询中删除中间名和后缀,也从报告的姓氏字符串中删除。

来自数据库: 我需要删除name2字段中姓氏左侧的中间名。他们被一个空间隔开。我还需要删除后缀,如果它存在于姓氏后面。

来自报告: 我需要删除中间名,该名称将以空格分隔的姓的左侧。这将在c#

中完成

如果我能提供更多信息以帮助解答,请告诉我。

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

2 个答案:

答案 0 :(得分:3)

我有一个类似的表格,其中包含...综合'姓氏'。

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

select getLast(combinedName) from ...

答案 1 :(得分:1)

正如约翰克利福德建议的那样,你可以使用像这样的分割来获取姓氏(伪代码):

// 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];
}

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

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