从名称字符串

时间:2015-12-04 05:00:02

标签: sql-server tsql

每当我在表格中遇到它们时,我都试图消除中间名首字母:

例如,如果我有John D Doe,我希望我的查询返回John Doe。这是我的询问。

declare @Name varchar(100);

select @Name = 'James D Doe';

select left(@Name, len(@Name)-charindex(' ', @Name,0))+' '+right(@Name, charindex(' ', @Name,0));

现在我的查询返回完整的字符串。每当遇到它们时,我如何剥离中间名首字母?我想要的输出是James Doe。

1 个答案:

答案 0 :(得分:1)

这应该适用于您只有一个中间名(或首字母)的特定用例:

SELECT CASE WHEN LEN(REPLACE(@Name, ' ', '')) = LEN(@Name) - 2
THEN
    CONCAT(SUBSTRING(@Name, 1, CHARINDEX(' ', @Name, 0)),
           SUBSTRING(@Name,
                     CHARINDEX(' ', @Name, CHARINDEX(' ', @Name, 0) + 1) + 1,
                     LEN(@Name) - CHARINDEX(' ', @Name, CHARINDEX(' ', @Name, 0) + 1)),
ELSE @Name
END