【问题标题】:Using SUBSTR and INSTR to get the suffix of a Name使用 SUBSTR 和 INSTR 获取名称的后缀
【发布时间】:2013-04-06 00:51:30
【问题描述】:

我需要从姓氏中获取后缀。例如,我可能会得到带有如下后缀的姓氏:Smith JrSmith Jr。或 Smith LCSW,或 Smith J.A.C.G.,甚至是这样的:Abardo Torres Jr 或 Abbas Feinberg 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 个单词 + 后缀组成的姓氏,例如 Smith Jr,但不适用于由 2 个单词组成的姓氏,例如 小阿巴多·托雷斯

【问题讨论】:

  • Smith III 博士 怎么样?你期待什么。
  • 或者,如果您在英国,以下情况是可能的(尽管可能性很小):陆军元帅 The Lord John of BlahBlah Esq KBE PhD MSc BSc 等。名称解析是一项极其复杂的业务。您不会想出所有可能的后缀,请考虑所有专业和宗教以及学术方面的后缀。您在寻找什么样的准确性?

标签: oracle oracle11g


【解决方案1】:
select 
  last_name,
  regexp_replace(last_name, '\s*((Esq|KBE|MSc|BSc|Jr|LCSW|PhD|J\.A\.C\.G)\.?\s*)*$') 
    as name_without_suffix,
  regexp_substr(last_name, '((Esq|KBE|MSc|BSc|Jr|LCSW|PhD|J\.A\.C\.G)\.?\s*)*$') 
    as suffix
from your_table

简单地获取字符串中的最后一个单词:

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

fiddle

【讨论】:

  • 嗨!您的语句返回所有姓氏,无论它们是否有后缀。带有后缀的那些被剥离并返回last_name。我需要的是查询 last_name 以便从那些具有后缀的名称中获取所有后缀。我在这里尝试做的目的是取回后缀,以便检查这些后缀是否正确。例如,如果我有姓氏,例如 Forbe rj,我的语句应该返回 rj,所以我知道这是错误的,应该将 rj 更新为 Jr。
  • @user1557856 - 您如何确定 rj 是姓氏的一部分还是后缀?
  • 感谢您添加我的示例,但(再次为英国)您没有 BA、MA、MSci、MMath、MChem、MPhys、MPhil、CIMA、ACCA、RCN、AAT ABTA、BDS ,FDS,RCS,FRCS,LLB...我可以永远继续... CMG,KCMG,QC,MD,...我的意思是,需要一个全面,灵活的清单。没有其他方法可以解决这个问题。
  • 我确实有一个表中的后缀列表,所以我可以从该表中创建一个列表,然后动态使用该列表来替换 Esq|KBE|MSc|BSc|Jr|LCSW |博士|
  • @user1557856 - 我理解 Ben 的观点,你应该有后缀列表和拼写错误的后缀列表(可能是从前一个列表自动生成的)。
猜你喜欢
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 2021-06-17
相关资源
最近更新 更多