2012-10-25 42 views
1

Mysql替換函數替換指定列或字符串中找到的字符串,是否有任何其他方法可以限制替換列/字符串的計數?mysql替換字符串計數限制

# replace 32 from the string, there are 3 occurance 
SELECT REPLACE('32,138,149,145,146,121,134,127,129,120,132,232','32',''); 

# note: 132,232 converted to 1 and 2 
print>>> ,138,149,145,146,121,134,127,129,120,1,2 

如何克服這一點?

+0

你是否想用精確的32位替換空字符串,而不是替換字符串132和232? –

+0

如果你想替換確切的'32'和沒有其他組合,如132和232等,這可能是有用的:http://stackoverflow.com/questions/6093813/how-to-limit-search-and-replace-string -in-mysql –

+0

謝謝,但是我看過那篇文章並不是我正在尋找的內容。我只想限制字符串中的1個替換。感謝@Nedret Recep解決方案 – justnajm

回答

2

虛構地連接具有乾草堆「」然後找針「 32」,而代之以「」

SELECT REPLACE(CONCAT(',','32,138,149,145,146,121,134,127,129,120,132,232',','), ',32,', ','); 

此外,如果你喜歡,你也將修剪兩個逗號結束。

SELECT TRIM(BOTH ',' FROM REPLACE(CONCAT(',','32,138,149,145,146,121,134,127,129,120,132,232',','), ',32,', ',')); 
+0

請注意,srting操作一般緩慢。我想這些是ID列表,如果你需要使用ID列表的字符串,你有一些非正常的數據庫結構。我會建議你規範化數據庫結構並使用連接。 –

+0

當每個250個分支有5000多個記錄時,那麼行將移動到5000x250行,可能會超過1250000+,InnoDB在更新時提供了行鎖定的優勢,因此考慮更好地僅行5000行而不是1250000行。 感謝您的最佳解決方案,我可以有:) – justnajm