2016-02-26 180 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