Sql 用于名称的Oracle 10G regexp

Sql 用于名称的Oracle 10G regexp,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我正在尝试编写一个regexp_替换,为一些员工创建一个“友好”的名字。它们当前存储为FIRST-LAST SITE\u ID 比如说, JOHN SMITH ABC JOHN Q SMITH ABC JOHN Q SMITH III ABC 我正在尝试编写一个正则表达式,以便最终得到: Smith, John Smith, John Q Smith III, John Q ABC“站点ID”不需要包含在我的输出中 这是我尝试的,但收效甚微: regex

我正在尝试编写一个regexp_替换,为一些员工创建一个“友好”的名字。它们当前存储为
FIRST-LAST SITE\u ID

比如说,

JOHN SMITH          ABC
JOHN Q SMITH        ABC
JOHN Q SMITH III    ABC
我正在尝试编写一个正则表达式,以便最终得到:

Smith, John
Smith, John Q
Smith III, John Q
ABC“站点ID”不需要包含在我的输出中

这是我尝试的,但收效甚微:

regexp_replace(
    employee_name, 
    '^(\S+)\s(\S+)\s(\S+)',
             '\3, \1 \2'
)

此外,我正在使用Oracle 10G。任何帮助都将不胜感激

如果您的姓名没有显示ruakh指出的问题,即没有单字母姓名或姓氏,也没有西班牙裔姓名,您可以尝试以下regexp:

^(\S+)\s(\S\s)?(\S+)(\s\S+)?\s\s+\S+$
替代品应为:

\3\4, \1\2

johnqiii
是中间名Q和姓III(
III,johnq
),还是姓Q和后缀III(
qiii,JOHN
)?这种名称的混乱总是有风险的,因为人们的名字并不总是符合我们的先入之见;例如,如果姓氏包含一个空格,比如加布里埃尔·加西亚·马尔克斯(Gabriel García Márquez),该怎么办?是的。约翰三世的中间名是Q,姓氏是III。