我正在字段中寻找某个字符串,并希望将其替换为新字符串。具体来说,我希望将对一个URL的所有引用都更改为另一个URL。我已经编写了此SQL语句,并mysql>
使用MySQL Community Server 5.1.54在CentOS 5.5 上的提示符下运行它。
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
响应为:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
我如何跟踪为什么不进行任何更改?
编辑1:
多亏了Aaron Bertrand,我发现它REPLACE()
无法处理通配符,而且我完全错误地使用了它(认为:缺少WHERE
子句)。这是我修改后的声明:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
我收到了古老的,熟悉的:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
我可能做错了什么?
编辑2:
我会告诉你我在做什么错!我不是在质疑假设。我的假设是,我要替换的字符串全部为小写。WHERE子句返回所有看起来的东西LIKE %companydomain.com%
。这包括所有大写排列,例如CompanyDomain.com,CoMpAnYdOmAiN.com等。
它传递给了REPLACE()
它,然后严格地寻找companydomain.com,然后将其替换为companydomain.org。
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
因此,我的记录当然会被退回,但是什么也没有被取代。一旦更改REPLACE()
为考虑大写字母,所有记录都将更新,看起来一切都很好。因此REPLACE()
,我的方案的正确语法为:
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )