2014-11-14 18 views
0

我想拋棄一切後,第二次強調 例如,選擇susbtring

R5504572C_TCHC001_171463_PDF

我想獲得

R5504572C_TCHC001

在SQL Server查詢。我嘗試過,並能夠得到R5504572C但我希望得到R5504572C_TCHC001

select distinct left(JCFNDFUF2, charindex('_', JCFNDFUF2) - 1) AS LeftString 

在此先感謝

回答

0

在這裏,你就會明白:

select distinct LEFT(JCFNDFUF2, CHARINDEX('_', JCFNDFUF2, CHARINDEX('_', JCFNDFUF2) + 1) - 1) AS LeftString 

你第一次調用CHARINDEX找到的第一個' _',然後使用該索引+ 1作爲下一個電話CHARINDEX的起始位置。如果你需要找到第五個'_',事情會變得醜陋。 :P

列名是「JCFNDFUF2」,嚴重嗎? :o

+0

非常感謝你,這是正確的答案, – Muhammad 2014-11-14 15:13:23

0

我要說明的是,如果第二'_'總是在相同的位置,那麼你可以簡單地使用:

select distinct left(JCFNDFUF2, 17) 

你只有一個例子,但它暗示了一個規範的值的命名方案 - 這樣的方案通常會有固定寬度的組件。

編輯:

您也可以使用這個parsename(),假設沒有逗號的成分做:

select distinct parsename(replace(JCFNDFUF2), '_', 4) + parsename(replace(JCFNDFUF2), '_', 3)