2011-12-05 87 views
2

我正在嘗試編寫一個regexp_replace來爲某些員工創建一個「友好」名稱。目前,他們正在存儲爲FIRST <POSSIBLE MIDDLE INITIAL> LAST <POSSIBLE SUFFIX> <MULTIPLE WHITESPACE> SITE_IDOracle 10G名稱正則表達式

例如,

JOHN SMITH   ABC 
JOHN Q SMITH  ABC 
JOHN Q SMITH III ABC 

我想寫一個正則表達式,這樣我將結束:

Smith, John 
Smith, John Q 
Smith III, John Q 

的ABC「網站ID」沒有按」 t需要包含在我的輸出中。

這是我嘗試過,但收效甚微:

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

此外,我使用Oracle 10g。任何幫助將不勝感激!

+1

會'JOHN Q III'有中間名Q和姓III('III,約翰Q'),或姓氏Q和後綴III('Q III,John' )?這種名稱拼湊總是有風險的,因爲人們的名字並不總是符合我們的先入之見;例如,如果姓氏包含一個空格,比如GabrielGarcíaMárquez,那該怎麼辦? – ruakh

+0

是的。約翰Q III將有中間名Q和姓III。 – muncherelli

回答

1

如果你的名字不顯示ruakh指出存在的問題,即,沒有單字母的名字或姓氏,也沒有拉美裔的名字,你可以試試這個正則表達式:

^(\S+)\s(\S\s)?(\S+)(\s\S+)?\s\s+\S+$ 

更換應該是:

\3\4, \1\2