我已经完成了迄今为止看起来不可能的任务,但我希望有人能更好地进行SQL查询,然后我可以解决这个问题。我在查询表中的数据时遇到问题。问题的根源是我被迫查询姓名和出生日期。出生日期有效,超出了我的问题范围。我的目标是使用源(excel报告)和目标(数据库)中的常用值进行查询,这就是姓氏。
字段:Name1,Name2 表:参与者
数据库中的Name2包含姓氏,但如果此人使用中间名或后缀,则它还包含这些值。大多数情况下,源(报告)仅包含姓氏,但有时也会将少量中间名称混合到姓氏中。我的目标是从数据库查询中删除中间名和后缀,也从报告的姓氏字符串中删除。
来自数据库: 我需要删除name2字段中姓氏左侧的中间名。他们被一个空间隔开。我还需要删除后缀,如果它存在于姓氏后面。
来自报告: 我需要删除中间名,该名称将以空格分隔的姓的左侧。这将在c#
中完成如果我能提供更多信息以帮助解答,请告诉我。
我对查询部分的第一个猜测是进行通配符搜索,我将从报告中获取姓氏并使用(例如' %%')查询表格。我认为这将获得我在搜索中寻找的记录,但我不确定它的效果如何。
答案 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);