Oracle 使用SUBSTR和INSTR获取名称的后缀

Oracle 使用SUBSTR和INSTR获取名称的后缀,oracle,oracle11g,Oracle,Oracle11g,我需要从姓氏中提取后缀。例如,我可能会得到后缀如下的姓氏:小史密斯或小史密斯或史密斯LCSW,或史密斯J.A.C.G.,甚至类似的东西:小阿巴多·托雷斯或阿巴斯·范伯格LCSW,等等 我知道我必须使用SUBSTR和INSTR,但我被卡住了。我只能做下面的事情,不能让它工作。有人能帮我吗 subtr(last_name,instr(last_name,' ',1) + 1 ,(instr(last_name,' ', instr(last_name,' ',1)+1 - (instr(l

我需要从姓氏中提取后缀。例如,我可能会得到后缀如下的姓氏:小史密斯或小史密斯或史密斯LCSW,或史密斯J.A.C.G.,甚至类似的东西:小阿巴多·托雷斯或阿巴斯·范伯格LCSW,等等

我知道我必须使用SUBSTR和INSTR,但我被卡住了。我只能做下面的事情,不能让它工作。有人能帮我吗

subtr(last_name,instr(last_name,' ',1) + 1
     ,(instr(last_name,' ', instr(last_name,' ',1)+1 - (instr(last_name,' ',1)+1)
即使我可以让它工作,它可能只适用于姓氏组成的1个字+后缀,如小史密斯,但不适用于姓氏组成的2个字,如小阿巴多托雷斯


要获取字符串中的最后一个单词,请执行以下操作:

regexp_substr(string, '(\S+)\s*$', 1, 1, 'i', 1)

史密斯III博士怎么样?你期待什么。或者如果你在英国,以下是可能的(尽管可能性很小):陆军元帅、布拉赫布拉赫Esq KBE博士约翰勋爵、理学硕士、理学学士等。姓名解析是一项极其复杂的业务。你不会想出所有可能的后缀,想想所有的专业和宗教后缀以及学术后缀。你想要什么样的准确度?嗨!您的语句返回所有姓氏,无论它们是否有后缀。带后缀的将被删除并返回姓氏。我需要的是查询姓氏,这样我就可以从那些有后缀的名字中得到所有的后缀。我在这里尝试做的目的是找回后缀,这样我就可以检查这些后缀是否正确。例如,如果我有姓氏,如Forbe rj,我的声明应该返回rj,这样我知道这是错误的,应该将rj更新为Jr.@user1557856-您如何确定
rj是姓氏的一部分还是后缀?感谢您添加我的示例,但(对于英国而言)您没有BA、MA、MSci、MMath、MChem、MPhys、MPhil,CIMA、ACCA、RCN、AAT ABTA、BDS、FDS、RCS、FRC、LLB。。。我可以永远继续下去。。。CMG、KCMG、QC、MD,。。。我的观点是,需要一份全面、灵活的清单。没有其他方法可以解决这个问题。我确实在一个表中有后缀列表,因此我可以从该表中创建一个列表,然后动态使用该列表替换Esq | KBE | MSc | BSc | Jr | LCSW | PhD | user1557856-正如我理解Ben的观点,您应该有后缀列表和拼写错误的后缀列表(可能是根据前一个列表自动生成的)。
regexp_substr(string, '(\S+)\s*$', 1, 1, 'i', 1)