如何将名字修剪为单个字符?

Mic*_*l A 0 sql t-sql sql-server-2008

我有一个列以全名格式存储数据,例如:

汤姆史密斯

安德鲁史密斯

是否有一个函数(或函数的组合),我可以使用它将其转换为以下内容:

T.史密斯

A.史密斯

Aar*_*and 5

应该分别存储名字和姓氏.同时:

SELECT CASE WHEN FullName LIKE '% %' THEN 
  LEFT(FullName, 1) + '.' + SUBSTRING(FullName, CHARINDEX(' ', FullName), 255)
    ELSE FullName END
  FROM dbo.table;
Run Code Online (Sandbox Code Playgroud)

另一种选择:

SELECT COALESCE(LEFT(FullName, 1) 
  + '.' + SUBSTRING(FullName, NULLIF(CHARINDEX(' ', FullName), 0), 255), 
  FullName)
FROM dbo.table;
Run Code Online (Sandbox Code Playgroud)

这两个都处理单词名称,如PrinceMadonna- 但他们不能正确处理你有中间名称的情况.那种情况下的问题是:

John Wayne Bobbitt
Billy Ray Cyrus
Lisa Van der Wal
Lee Harvey Oswald
Dennis Moseley Williams
James de Caan
Run Code Online (Sandbox Code Playgroud)

你如何确定哪些是中间名,哪些是多字姓呢?如果你正在处理这种情况,那就开始更加努力地摇动你的拳头.