2014-02-25 15 views
-2

我將如何去分裂具有第一個,最後一個和中間名的一列。要在SQL Server 2008查詢中擁有單獨的列嗎?SQL:將第一個,最後一個和中間名分割到它們自己的列中?

列被稱爲NAME

NAME(char(25),null) 

Mctasrren ,David Max 
Cressler ,Patti L 
Basil ,Vessen Eddie 
Chapplestait ,Victoy 

這是我到目前爲止已經用我的主要問題是中間名。或者如果有人有更好的方法來縮短名字代碼。

--last名稱代碼

left([NAME],charindex(' ,',[NAME])) 

- 第一名稱代碼

substring([NAME],charindex(',',[NAME])+1,charindex(' ',substring([NAME],charindex(',',[NAME])+1,25-charindex(',',[NAME])+1))) 
+0

所以你希望有人給你沒有任何努力的答案。這不是什麼關於。 –

+0

其實瑞克我一直在嘗試。 – user2974995

+0

nicky我已經能夠使用左([PA-PT-NAME],charindex(',',[NAME]))得到最後的名字,它真的給我帶來麻煩的中間名 – user2974995

回答

2

你想將它拆分成多列的結果集的一部分,在表上創建計算列,或實際更新模式以將數據拆分到源代碼中?

在任何情況下,基本的螺母和螺栓可以通過這樣做:

  1. 使用CHARINDEX,SUBSTRING,左或右的組合發現周圍的逗號或空格和分裂。如果您確定自己的數據總是「L_NAME,F_NAME M_NAME_OR_INITIAL」,那將非常簡單。其實我很驚訝我在谷歌搜索的頂部附近沒有找到類似的問題,但有一個類似的例子,從SQLServerCentral

  2. 通過CLR使用正則表達式,如果數據中有任何多樣性,可以更加健壯。如果您熟悉RegEx,這應該是一個直接的解析。再次,一個簡化的例子可以在MSDN上找到。

無論您選擇什麼,您可能會很快遇到不輕易遵循該格式的名稱。在這種情況下,你想要在一個函數中構建更多的邏輯來處理不同類型的名稱。

+1

+1有一個很好的解釋,而不僅僅是把答案交給他。我知道有人最終會這樣做。在SO之後提出問題應該是您在所有其他方面都失敗後最後的選擇。 –

相關問題