使用SUBSTR和INSTR获取Name的后缀

时间:2013-04-05 16:06:51

标签: oracle oracle11g

我需要从姓氏中获取后缀。例如,我可能会得到带有后缀的姓氏: Smith Jr Smith 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个单词的姓氏,例如< em> Abardo Torres Jr

1 个答案:

答案 0 :(得分:0)

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