2011-05-23 94 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