2014-04-03 43 views
0

因此,這裏是我面對的窘境,我有大約50000條記錄,每有一個原告&被告的名字,這兩個名字的駐留在一列中,我想解析出來分成兩個單獨的列。這些名稱的長短不一,正如名稱一樣,其中一些名稱具有前綴或後綴。拋開前綴和後綴,這不應該是一個難以寫的查詢,但我掛起的位置在字符串的中間。 我一起工作的數據是按以下格式:Parsename,CharIndex或子字符串?

Column_Name 
John Doe V Elton John 
Jane Doe V Elton John 
David Smith V Elton John 

我試圖寫一個查詢,希望分隔各地的「V」的名字,我的目標數據最終會是這樣的:

原告_名字|被告人_名字|
John Doe |艾爾頓約翰|

然而,當我告訴它以「」它取代了空間字符串中的每一個V到更換一個「V」。任何建議你們必須提供,將不勝感激。

感謝,

納撒尼爾座

+0

全部在'Column_Name'一行這個樣本數據? '李四V埃爾頓·約翰Jane Doe的V埃爾頓·約翰大衛·史密斯訴埃爾頓John' – DMason

+0

不,先生,有多個行。 I.E. John Doe V Elton John是第一排的原告和被告。第二行有不同的原告/被告人名字,如Jane Doe V Elton John。 – user3495301

+0

你說有些名字有後綴。是否有後綴「V」表示「第5」?如果是這樣,這將是棘手的做了「V」一個簡單的分裂,特別是如果左側的名稱具有「V」,在這種情況下,名稱爲「李四,VV埃爾頓·約翰」 –

回答

1

因爲它已經在原來的問題沒有名字永遠不會有一個「V」後綴評論寫得很清楚了,你可以使用CHARINDEX找到「V」(即空間-V空間),然後的位置使用SUBSTRING獲得兩個部分:

;WITH cte AS 
(
    SELECT tmp.COLUMN_NAME, 
      tmp.OTHER_FIELD, 
      CHARINDEX(' V ', tmp.COLUMN_NAME) AS [DelimiterPosition] 
    FROM (
      SELECT 'John Doe V Elton John', 23 
      UNION ALL 
      SELECT 'Jane Doe V Elton John', 78922 
      UNION ALL 
      SELECT 'David Smith V Elton John', 932 
      UNION ALL 
      SELECT 'David Doe 5th v Elton John', 53 
     ) AS tmp(COLUMN_NAME, OTHER_FIELD) 
) 
SELECT cte.COLUMN_NAME, 
    SUBSTRING(cte.COLUMN_NAME, 1, (cte.DelimiterPosition - 1)) AS [Plaintiff], 
    SUBSTRING(cte.COLUMN_NAME, (cte.DelimiterPosition + 3), 500) AS [Defendant], 
     cte.OTHER_FIELD 
FROM cte 

輸出:

COLUMN_NAME     Plaintiff  Defendant OTHER_FIELD 
John Doe V Elton John  John Doe  Elton John 23 
Jane Doe V Elton John  Jane Doe  Elton John 78922 
David Smith V Elton John David Smith Elton John 932 
David Doe 5th v Elton John David Doe 5th Elton John 53 
+0

純粹的偏執狂:這會在字符串中捕捉到'V'的第一個實例。可以在被告列中爲附加的'V'實例進行第二次掃描,以確保沒有任何。 –

+0

srutzky,如你所知,這個作品!非常感謝您今天的幫助。 Jayvee,DMason,感謝您的評論,我將能夠清理這些數據並將其拆分成我現在需要的數據。如果沒有你們,我不能這樣做 – user3495301

+0

@ user3495301:歡迎你。請記住如果它適合您,請將其標記爲已接受的答案。謝謝。 –

0

可以代替「V」(包括空格),以保護字符串中的「V」,你可能會失去一箇中間初始,如果還沒有得到一個點或者第5個後綴。

相關問題