2011-05-23 127 views
3

我使用這個搜索和MySQL的替換字符串中的MySQL替換字符串:如何限制搜索和

UPDATE products 
    SET prodname = REPLACE(prodname, " S", "'S") 

產品包含字符串,如「泰諾林TABS 100 S」我想這對轉換爲「TYLENOL TABS 100'S」。

但是,使用上面的SQL語句也影響字符串,例如「耐克鞋」,這將成爲「NIKE'SHOES」 - 這顯然我不喜歡。

有沒有一種方法,我可以限制替換功能(或有另一種方式來做到這一點),所以我可以得到我想要的結果呢? 「S」通常位於字符串的最後,用於我的大部分數據,我希望這會有所幫助。

+0

沒有的「s」始終遵循多少? – 2011-05-23 06:54:55

回答

4

你可以嘗試:

這意味着產品具有prodname以S結尾將被更新。 %字符意味着任何東西。

+0

這仍然將取代過多時,那裏條件滿足,如將與'泰諾東西100 S'的情況下,你最終會與'tylenol'something 100'S' – 2011-05-23 07:01:26

+0

謝謝理查德。我試過這個,它完美的工作:) – 2011-05-23 07:26:09

+0

@andyuyboco不客氣!然而@Nathan gonzalez是正確的,小心'tyrename'像'TYLENOL S-WORDS 100 S'。 – AndersTornkvist 2011-05-23 07:29:17

6

你可以通過把一個WHERE子句一個RegExp()限制於更接近於你的需求的一個子集:

UPDATE products SET prodname = REPLACE(prodname, " S", "'S") WHERE prodname REGEXP '[0-9]\sS' 

這是產品的名稱有一個數字,後面加一個空格行匹配,接着是S.可悲的是有沒有正則表達式的替代由默認在MySQL中實現,能夠只更換那場比賽,所以這也將取代「泰諾林TAB SOLO 100 S」到「泰諾林TAB'SOLO 100的」,但它將不會取代您的原始「TYLENOL TABS 100 S」

+0

我不太確定你的答案是否能解決問題,因爲你說默認沒有正則表達式替換? – 2011-05-23 08:00:31

+0

事實上,沒有REGEXP替換,但它只更新了**以'數字空間S'形式存在值的記錄。 – 2011-05-23 08:05:57

+0

好吧,我現在明白了。謝謝。 – 2011-05-23 08:07:18

1

如果您只想要prodnameS結尾,那麼您還可以使用:

UPDATE products SET prodname = CONCAT(SUBSTR(prodname,1,CHAR_LENGTH(prodname)-2),"'S") 
WHERE prodname LIKE "% S" 

這不會取代TYLENOL SOMETHING 100 S到但TYLENOL SOMETHING 100'S%字符意味着什麼,因爲其他答案在這一刻。

+0

可悲的是,這來得太晚了。 :p 我會在下一次需要時記住它。 – 2011-05-23 08:01:39

+0

如果產品名稱是'TYLENOL SOMETHING 100 S BEST EVER',該怎麼辦? – 2011-05-23 08:09:08

+0

@Tudor你說得對,但我用這個開始了我的答案。我給出這個答案的原因是因爲我讀了:「S」通常位於字符串的最後,用於我的大部分數據,我希望這會有所幫助。「 – AndersTornkvist 2011-05-23 14:51:45