姓氏带有连字符的名字的姓氏开关

时间:2019-05-07 18:13:10

标签: sql sql-server

我知道这个问题已经被问过几次了,我已经可以使用在StackOverflow上找到的结果找到部分答案。我有一列包含“ LastName FirstName”的名称组合,我需要在行中显示“ FirstName LastName。我可以使用以下SQL代码来实现:

SELECT
SUBSTRING('First Last', CHARINDEX(' ', 'First Last') + 1, 8000) +' '+ 
SUBSTRING('First Last', 1, CHARINDEX(' ', 'First Last') - 1)  AS Name

现在,当我尝试使用具有以下代码的数据来使用此代码时:

SUBSTRING(Rtrim(Ltrim(name)), CHARINDEX(' ', Rtrim(Ltrim(name))) + 1, 
8000) +' '+ SUBSTRING(Rtrim(Ltrim(name)), 1, CHARINDEX(' ', 
Rtrim(Ltrim(name))) - 1)  AS Name
FROM
VW_MyView

我得到了预期的结果,但同时也收到一条错误消息,指出

  

传递给LEFT或SUBSTRING函数的长度参数无效。

我已将错误跟踪到带有连字符的名称。在此过程中我该如何处理这些连字符

1 个答案:

答案 0 :(得分:0)

嗯。 。 。

如果只有一个或两个名称用空格隔开:

select (stuff(name, 1, charindex(' ', name + ' ') - 1, '') + ' ' +
        left(name, charindex(' ', name + ' ') - 1)
       )

请注意,这会附加一个空格,以便charindex()返回有效位置。