我正在使用它来搜索和替换mySQL中的字符串:
UPDATE products
SET prodname = REPLACE(prodname, " S", "'S")
产品包含“TYLENOL TABS 100 S”等字符串,我想将其转换为“TYLENOL TABS 100'S”。
然而,使用上面的SQL语句也会影响字符串,例如“NIKE SHOES”,它将成为“NIKE'SHOES” - 我显然不喜欢它。
有没有办法可以限制替换功能(或者有另一种方法可以做到这一点)所以我可以得到我想要的结果吗?对于我的大多数数据,“S”通常位于字符串的尾端,我希望这将有所帮助。
答案 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)
如果您只想prodname
以S
结尾,那么您也可以使用:
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意味着什么,正如其他答案一样。