我在我的數據庫中有一列存儲標題,名字和姓氏。但是這個列中的數據有時並不乾淨,客戶的標題缺失或爲空,其他時候名字不可用,而在其他時間,姓氏無效。現在,我想要將列分隔或拆分爲三個 - 標題,名字,姓氏,記住我必須檢查空值或空數據。如何清理這個數據讓喜歡錯誤:不返回SUBSTRING和CHARINDEX分隔列中的值
Msg 536, Level 16, State 2, Line 1
Invalid length parameter passed to the RIGHT function.
或
Msg 537, Level 16, State 2, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.
。
我寫了這樣的腳本,但不夠好。
SELECT FullName
, LEFT(FullName, ISNULL(NULLIF(CHARINDEX(' ', FullName) - 1, -1), LEN(FullName))) AS Title
, RIGHT(Salute, LEN(Salute) - CHARINDEX(' ', FullName, 1)) FirstName
, SUBSTRING(FullName, 1, CHARINDEX(' ', FullName, 19) - 1) LastName
FROM Details
如果我們有一個標題和一個名字,我們應該分成Title,FirstName。如果沒有標題,我們會將其視爲姓名和姓氏 謝謝。
空數據不能存在於字符串中。那麼一些數據看起來像什麼代表你的每個案例。你在這裏的模式匹配水平之後。如果Title和firstName缺失,你怎麼知道這是姓氏而不是名字?它是否被一個像COMMA這樣的值分開了?所以它可能看起來像,史密斯先生或史密斯先生,或者你可以有史密斯先生,在這種情況下,我不知道史密斯是最後名字還是名字? – xQbert 2014-09-26 15:25:21
沒有COMMA或類似的東西。數據不帶分隔符輸入。 – dLight 2014-09-26 15:32:15
所以你用空格來表示分離,然後假設名字或標題不像Jake II或John Paul Jones先生那樣複雜。 – xQbert 2014-09-26 15:35:07