将全名拆分为名字和姓氏时出错



运行以下代码时,我收到传递给 LEFT 或 SUBSTRING 函数的长度参数无效的错误。

名称的格式为:

姓氏 名字 中间名

只有姓氏和名字与我相关

SELECT SUBSTRING(longname, 1, CHARINDEX(' ', longname + ' ') - 1) AS Firstname,     
       SUBSTRING(longname,
                 CHARINDEX(' ', longname + ' ') + 1,
                 LEN(longname) - CHARINDEX(' ', longname + ' ')) AS Lastname
FROM Table 
WHERE longname IS NOT NULL

我认为LastName的逻辑是错误的。 试试这个:

SELECT v.Firstname,     
       LEFT(rest, CHARINDEX(' ', rest + ' ') - 1) as LastName
FROM Table t CROSS APPLY
     (VALUES (LEFT(longname, CHARINDEX(' ', longname + ' ') - 1),
              STUFF(longname, 1, CHARINDEX(' ', longname + ' '), '')
             )
     ) v(FirstName, rest)
WHERE longname IS NOT NULL

"longname" 不包含空格,所以它抛出"传递给 SUBSTRING 函数的长度参数无效"。 请"longname"值或保留条件,如果空格包含,则应用子字符串函数,否则将长名作为名字

最新更新