我想拋棄一切後,第二次強調 例如,選擇susbtring
R5504572C_TCHC001_171463_PDF
我想獲得
R5504572C_TCHC001
在SQL Server查詢。我嘗試過,並能夠得到R5504572C
但我希望得到R5504572C_TCHC001
select distinct left(JCFNDFUF2, charindex('_', JCFNDFUF2) - 1) AS LeftString
在此先感謝
我想拋棄一切後,第二次強調 例如,選擇susbtring
R5504572C_TCHC001_171463_PDF
我想獲得
R5504572C_TCHC001
在SQL Server查詢。我嘗試過,並能夠得到R5504572C
但我希望得到R5504572C_TCHC001
select distinct left(JCFNDFUF2, charindex('_', JCFNDFUF2) - 1) AS LeftString
在此先感謝
在這裏,你就會明白:
select distinct LEFT(JCFNDFUF2, CHARINDEX('_', JCFNDFUF2, CHARINDEX('_', JCFNDFUF2) + 1) - 1) AS LeftString
你第一次調用CHARINDEX
找到的第一個' _',然後使用該索引+ 1作爲下一個電話CHARINDEX
的起始位置。如果你需要找到第五個'_',事情會變得醜陋。 :P
列名是「JCFNDFUF2」,嚴重嗎? :o
只是用起始位置
select distinct left(JCFNDFUF2, charindex('_', JCFNDFUF2, charindex('_', JCFNDFUF2))+1) - 1) AS LeftString
我要說明的是,如果第二'_'
總是在相同的位置,那麼你可以簡單地使用:
select distinct left(JCFNDFUF2, 17)
你只有一個例子,但它暗示了一個規範的值的命名方案 - 這樣的方案通常會有固定寬度的組件。
編輯:
您也可以使用這個parsename()
,假設沒有逗號的成分做:
select distinct parsename(replace(JCFNDFUF2), '_', 4) + parsename(replace(JCFNDFUF2), '_', 3)
非常感謝你,這是正確的答案, – Muhammad 2014-11-14 15:13:23