运行以下代码时,我收到传递给 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"值或保留条件,如果空格包含,则应用子字符串函数,否则将长名作为名字