如何解决如何限制搜索和替换mySQL中的字符串
| 我正在使用它来搜索和替换mySQL中的字符串:UPDATE products
SET prodname = REPLACE(prodname,\" S\",\"\'S\")
这些产品包含诸如“ TYLENOL TABS 100 S”之类的字符串,我想将其转换为“ TYLENOL TABS 100 S'”。
但是,使用上面的SQL语句也会影响诸如\“ NIKE SHOES \”之类的字符串,这些字符串将变成\“ NIKE \'SHOES \” –我显然不喜欢。
有没有办法限制替换功能(或者有其他办法做到这一点),以便获得所需的结果?对于大多数数据,\“ S \”通常位于字符串的尾部,我希望这会有所帮助。
解决方法
您可以通过在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 \“代替
,您可以尝试:
UPDATE products SET prodname = REPLACE(prodname,\"\'S\")
WHERE prodname LIKE \"% S\"
这意味着以S3ѭ结尾的产品将被更新。 %
char表示任何含义。
,如果您只想以S
结尾的prodname
,那么您还可以使用:
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表示任何含义,此刻其他答案也一样。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。