2016-02-26 58 views
0

我遇到问题。我正在8700万行文件上运行名称解析脚本。它设置为解析NAME列,其中包含数据,如SMITH,STEVE S等。传递给RIGHT函数的长度参数无效MESSAGE

当我运行下面的命令名称分解成列的名字,中间名和姓氏,这在我的所有其他表的作品,但这个倔强的人,我得到这个错误:

Invalid length parameter passed to the RIGHT function

不能确定为什么。请任何帮助将是伟大的。

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) 
+0

我们可以购买一些样品输入和预期输出吗?代码的一点格式也会造成奇迹。那么我们可能会理解'case'表达式中的'else'子句是基于一个不切实际的假设。或者一个NULL在悄悄 – HABO

+0

当然,基本上如前面提到有一列称为名称中有各种名称的姓氏,名字中间名格式如: 史密斯,史蒂夫·赖恩 史密斯,史蒂芬 史密斯,史蒂夫 - [R 等等...... 上面的解析器根据代码将它拆分为列名,中间名,姓......这对于除此表以外的所有内容都很有用。我做之前执行该TSQL脚本运行一个清除脚本,它是: 选择前10名 从表6 其中CHARINDEX(“”,名字)= 0 从表6 其中名称=‘’ 删除删除 从表6 其中名称为空 从表6 其中相似的名称“%,%,” – Sal

+0

所以_every_行的形式有一个名字'LAST,␢FIRST␢I'删除删除? – HABO

回答

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 '% % %'; 
+0

不幸的是,这仍然弹出一个错误... – Sal

相关问题