我正在寻找一个字段中的某个字符串,并想用一个新字符串替换它。具体来说,我希望将对一个 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' )
REPLACE
不会那样玩通配符。我想你的意思是:您没有
WHERE
子句,因此它尝试%TLD.com%
更新 618 行,但在该列中没有找到任何实例。要查看哪些行应该受到影响,请SELECT
改为运行:首先,我们必须使用
select
查询进行检查:接下来,我们必须更新:
结果:
Cloud & Enterprise Computing
⇒Cloud & Enterprise Computing
最后,我们要申请所有:
结果:
Corporate & Insolvency Law
⇒Corporate & Insolvency Law