2016-08-12 83 views
9

我必須從具有類似「或ccc或bbb或aaa」的@temp表中獲取數據我想將第一個匹配項替換爲空格來獲得像這樣的內容「 ccc或bbb或aaa「。我想要的東西,但取代他們似乎並沒有得到我想要的結果在SQL中的字符串中替換第一次出現的子串字符串

我曾嘗試:

DECLARE @stringhere as varchar(500) 

DECLARE @stringtofind as varchar(500) 

set @stringhere='OR contains or cccc or ' 

set @stringtofind='or' 
select STUFF('OR contains or cccc or ',PATINDEX('or', 'OR contains or cccc or '),0 ,' ') 
+0

你想使一個動態查詢where子句? –

+0

我想在刪除首次出現的字符串後得到最終值。 – Shobhit92

+0

請[閱讀本社區討論](http://meta.stackoverflow.com/q/326569/472495)關於緊急乞討,並且告知這不是解決志願者問題的適當方式。謝謝! – halfer

回答

8

您可以使用STUFFCHARINDEX的組合來實現你想要的:

SELECT STUFF(col, CHARINDEX('substring', col), LEN('substring'), 'replacement') 
FROM #temp 

CHARINDEX('substring', col)將返回該列中的第一發生'substring'的索引。 STUFF然後用'replacement'代替這種情況。

+0

非常感謝你,先生,工作絕對正常...搜索小時,這沒有足夠好的結果。 ...謝謝 – Shobhit92

+0

很高興幫助你......並且你問了一個相當不錯的問題:-) –

+0

比特已經晚了(但是很驚訝,這在之前沒有提到),但是這似乎只在*出現時才起作用'substring''。如果沒有,則返回'null'。所以一個'CASE'表達式是可取的。 – HoneyBadger

1

看來你錯過2 %前面和尾部的目標字符串

請嘗試:

select STUFF(@stringhere, PATINDEX('%' + @stringtofind + '%', @stringhere), LEN(@stringtofind), ' ') 
+0

@ user3331798:請嘗試 – Grace

+0

謝謝恩典這也很完美... – Shobhit92

+0

@ user3331798:謝謝,但是爲什麼在''''裏有兩個單引號或者包含或cccc或'? – Grace

相關問題