如何在mySQL中限制搜索和替换字符串

时间:2011-05-23 06:53:17

标签: mysql sql

我正在使用它来搜索和替换mySQL中的字符串:

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

产品包含“TYLENOL TABS 100 S”等字符串,我想将其转换为“TYLENOL TABS 100'S”。

然而,使用上面的SQL语句也会影响字符串,例如“NIKE SHOES”,它将成为“NIKE'SHOES” - 我显然不喜欢它。

有没有办法可以限制替换功能(或者有另一种方法可以做到这一点)所以我可以得到我想要的结果吗?对于我的大多数数据,“S”通常位于字符串的尾端,我希望这将有所帮助。

3 个答案:

答案 0 :(得分:6)

您可以通过将WHERE子句与REGEXP()一起限制为更符合您需求的子集:

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

这匹配产品名称的行,后跟一个空格,后跟一个S.遗憾的是,MySQL中默认没有实现REGEX替换,只能替换那个匹配,所以这也是将“TYLENOL TAB SOLO 100 S”替换为“TYLENOL TAB'SOLO 100'S”,但它不会取代原来的“TYLENOL TABS 100 S”

答案 1 :(得分:4)

你可以尝试:

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

这意味着将更新以S结尾的prodname的产品。 % char意味着什么。

答案 2 :(得分: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,而是替换为TYLENOL SOMETHING 100'S% char意味着什么,正如其他答案一样。