传递给RIGHT函数MESSAGE的长度参数无效

时间:2016-02-26 02:11:52

标签: sql sql-server tsql

我有一个问题。我在一个8700万行的文件上运行一个名称解析脚本。它被设置为解析NAME列,其中包含数据,如SMITH,STEVE S等。

当我运行以下命令将名称拆分为列名firstname,middlename和lastname,这些列在我的所有其他表中有效,但是这个顽固的表,我收到此错误:

  

传递给RIGHT函数的长度参数无效

不确定为什么。请任何帮助都会很棒。

UPDATE table6
    SET lastName = LEFT(Name, CHARINDEX(', ', Name) - 1), 
        firstname = SUBSTRING(Name, CHARINDEX(', ', Name) + 2, CASE WHEN CHARINDEX(' ', Name, CHARINDEX(', ', Name) + 2) = 0 THEN LEN(Name) + 1 ELSE CHARINDEX(' ', Name, CHARINDEX(', ', Name) + 2) END - CHARINDEX(', ', Name) - 2),
        middlename = RIGHT(Name, LEN(Name) - CASE WHEN CHARINDEX(' ', Name, CHARINDEX(', ', Name) + 2) = 0 THEN LEN(Name) ELSE CHARINDEX(' ', Name, CHARINDEX(', ', Name) + 2) END) 

1 个答案:

答案 0 :(得分:1)

您可能需要验证名称是否符合此语法。一种方法是使用like

UPDATE table6
    SET lastName = LEFT(Name, CHARINDEX(', ', Name) - 1), 
        firstname = SUBSTRING(Name, CHARINDEX(', ', Name) + 2, CASE WHEN CHARINDEX(' ', Name, CHARINDEX(', ', Name) + 2) = 0 THEN LEN(Name) + 1 ELSE CHARINDEX(' ', Name, CHARINDEX(', ', Name) + 2) END - CHARINDEX(', ', Name) - 2),
        middlename = RIGHT(Name, LEN(Name) - CASE WHEN CHARINDEX(' ', Name, CHARINDEX(', ', Name) + 2) = 0 THEN LEN(Name) ELSE CHARINDEX(' ', Name, CHARINDEX(', ', Name) + 2) END) 
    WHERE Name LIKE '% % %';