-- 基本语法
REPLACE(string, old_substring, new_substring)
-- 示例:将"旧文本"替换为"新文本"
UPDATE users
SET address = REPLACE(address, '北京市', '北京市朝阳区')
WHERE address LIKE '%北京市%';
-- 查询时替换
SELECT
name,
REPLACE(phone, '+86-', '') AS clean_phone
FROM customers;
-- 同时更新多个字段
UPDATE products
SET
description = REPLACE(description, '损坏', '良好'),
title = REPLACE(title, '二手', '全新'),
status = REPLACE(status, '下架', '在售')
WHERE category = '电子产品';
-- 根据条件替换不同值
UPDATE employees
SET department =
CASE
WHEN department = 'IT部' THEN '技术部'
WHEN department = 'HR部' THEN '人力资源部'
WHEN department = 'Sales' THEN '销售部'
ELSE department
END;
-- 查询时条件替换
SELECT
order_id,
CASE
WHEN status = 'P' THEN '待支付'
WHEN status = 'S' THEN '已发货'
WHEN status = 'C' THEN '已完成'
ELSE '未知状态'
END AS status_desc
FROM orders;
-- 使用REGEXP_REPLACE
UPDATE articles
SET content = REGEXP_REPLACE(content, '\\d{11}', '[手机号已隐藏]')
WHERE content REGEXP '\\d{11}';
-- 删除所有HTML标签
UPDATE comments
SET text = REGEXP_REPLACE(text, '<[^>]+>', '');
-- 多层嵌套替换
UPDATE documents
SET content = REPLACE(
REPLACE(
REPLACE(content, '张三', '李四'),
'2022年', '2023年'
),
'旧地址', '新地址'
);
-- 去除两端空格
UPDATE customers
SET
name = TRIM(name),
email = LOWER(TRIM(email));
-- 去除所有空格(包括中间空格)
UPDATE products
SET product_code = REPLACE(product_code, ' ', '');
-- 去除换行符和制表符
UPDATE articles
SET content = REPLACE(REPLACE(content, '\n', ' '), '\t', ' ');
-- 统一电话号码格式
UPDATE contacts
SET phone =
CASE
WHEN phone LIKE '+86%' THEN REPLACE(phone, '+86-', '')
WHEN phone LIKE '0086%' THEN REPLACE(phone, '0086-', '')
WHEN phone LIKE '86%' THEN REPLACE(phone, '86-', '')
ELSE phone
END;
-- 清理邮箱地址
UPDATE users
SET email =
LOWER(
REPLACE(
REPLACE(
TRIM(email),
' ', ''
),
';', ','
)
);
-- 第一步:查看将被影响的数据
SELECT
id,
current_value,
REPLACE(current_value, 'old', 'new') AS new_value
FROM my_table
WHERE current_value LIKE '%old%';
-- 第二步:执行更新
UPDATE my_table
SET current_value = REPLACE(current_value, 'old', 'new')
WHERE current_value LIKE '%old%';
-- 第三步:验证结果
SELECT COUNT(*) AS updated_count FROM my_table WHERE current_value LIKE '%new%';
BEGIN TRANSACTION;
-- 备份受影响的数据
CREATE TABLE backup_table AS
SELECT * FROM target_table WHERE condition;
-- 执行替换
UPDATE target_table
SET field = REPLACE(field, 'old', 'new')
WHERE condition;
-- 检查结果
SELECT * FROM target_table WHERE condition;
-- 如果满意则提交
COMMIT;
-- 如果不满意则回滚
-- ROLLBACK;
-- 为被替换字段添加索引
CREATE INDEX idx_field ON table_name(field);
-- 执行替换
UPDATE table_name
SET field = REPLACE(field, 'old', 'new')
WHERE field LIKE '%old%';
-- 完成后删除临时索引(可选)
DROP INDEX idx_field ON table_name;
-- 使用LIMIT分批处理
UPDATE large_table
SET text_field = REPLACE(text_field, 'old', 'new')
WHERE text_field LIKE '%old%'
LIMIT 10000;
-- 循环执行直到没有需要更新的行
-- 将HTTP替换为HTTPS
UPDATE website_urls
SET url = REPLACE(url, 'http://', 'https://')
WHERE url LIKE 'http://%';
-- 移除URL末尾的斜杠
UPDATE website_urls
SET url =
CASE
WHEN url LIKE '%/' AND LENGTH(url) > 1
THEN LEFT(url, LENGTH(url) - 1)
ELSE url
END;
-- 批量重命名产品SKU
UPDATE inventory
SET sku = CONCAT('NEW-', REPLACE(sku, 'OLD-', ''))
WHERE sku LIKE 'OLD-%';
-- 将英文术语转换为中文
UPDATE multilingual_content
SET content =
REPLACE(
REPLACE(
REPLACE(content,
'login', '登录'),
'register', '注册'),
'dashboard', '仪表板'
)
WHERE language = 'zh-CN';
| 功能 | MySQL | PostgreSQL | SQL Server |
|---|---|---|---|
| 基本替换 | REPLACE() | REPLACE() | REPLACE() |
| 正则替换 | REGEXP_REPLACE() | REGEXP_REPLACE() | PATINDEX() |
| 去除空格 | TRIM() | TRIM() | LTRIM(RTRIM()) |
| 转大小写 | LOWER()/UPPER() | LOWER()/UPPER() | LOWER()/UPPER() |
以上示例覆盖了SQL字段替换的常见场景,根据实际需求选择合适的方法,并注意数据安全和性能优化。