2013-04-26 105 views
0

是否可以通過在給定字符串或字符前後刪除空格(1個或多個空格)來更新行?我需要在特定字符(@)之前和之後的所有空格被剝離,但也會保持單元格中的其他空格不變。MySQL - 刪除給定字符串或字符前後的空格

實施例:

'This is a simple  @ example' 

應該被更新爲

'This is a [email protected]' 

同樣:

'This is another @example' 

應該被更新爲

'This is [email protected]' 

我可以使用PHP來做到這一點,但如果有一種方法可以在單個查詢中完成此操作,那麼將更容易。

+0

'替換(替換(yourfield,'@','@'),'@','@')'。繼續運行,直到你沒有更多的替代品。 – 2013-04-26 15:02:45

+0

@MarcB讓它成爲答案。 – Kermit 2013-04-26 15:03:11

+0

替換將作爲@MarcB提及 – codingbiz 2013-04-26 15:03:35

回答

0

這個怎麼樣:

SELECT REPLACE(REPLACE(line, ' @', '@'), '@ ', '@') FROM tab1; 

sqlfiddle

UPDATE:

允許之前或之後去除任意數量的空格的@做到這一點:

SELECT CONCAT(RTRIM(LEFT(line,LOCATE('@',line)-1)),'@', 
     LTRIM(SUBSTR(line,LOCATE('@',line)+1))) 
FROM tab1; 

看到新的sqlfiddle來玩這個。

請注意,如果行中有多個@,則此方法僅適用於第一個。

+0

不適用於多個空間,但... http://sqlfiddle.com/#!2/f1bd9/1 – Nanne 2013-04-26 15:13:39

+0

請參閱更新。這應該工作! – luksch 2013-04-26 15:17:43

0

沒有默認的正則表達式可以用來替換。所以,你有三種選擇:

  1. 用正則表達式替換擴展的MySQL: 你可以使用UDF(用戶定義函數,this one to be exact)做一個正則表達式替換。然後,您可以使用類似\s*@\s*的東西來指示圍繞@的多個空格。

  2. 使用默認的替換: 你需要前後@後「硬編碼」您的內容替換佔幾格,笨重(並且永遠不會完成)的任務。您最終會進行大量替換或重複某個功能(從@標誌中刪除100次一個空格)。要清楚的是,在評論和@luksch的回答中提到的雙倍替代將不足以滿足超過1個空間。

+0

3.在@處分割刺,並使用LTRIM和RTRIM。看到我的答案更新:) UDF的缺點是你需要在每個你想運行查詢的mysql實例上創建這些。如果這沒有問題,那麼你的解決方案1是完美的。 – luksch 2013-04-26 15:31:06