首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL REPLACE 批次更新欄位內容:字串替換實戰語法與跨資料庫差異

     編輯:MySQL 資料庫相關知識

欄位內容需批次替換特定字串 (如網域遷移、舊路徑清理) 時,REPLACE() 配合 UPDATE 可單條 SQL 完成,無需程式迴圈。

標準 SQL (MySQL / SQL Server / PostgreSQL 通用)


UPDATE table_name
SET column_name = REPLACE(column_name, 'old_string', 'new_string')
WHERE column_name LIKE '%old_string%';  -- 可選:縮小掃描範圍

實戰範例:CMS 圖片網域遷移


-- MySQL
UPDATE t_newsinfo
SET content = REPLACE(content, 'https://admin.thinkall.net.cn/', 'https://admin.xkpx.com/');

-- SQL Server (大欄位需 CAST)
UPDATE t_newsinfo
SET [content] = REPLACE(CAST([content] AS VARCHAR(MAX)), 'https://admin.thinkall.net.cn/', 'https://admin.xkpx.com/');

-- PostgreSQL
UPDATE t_newsinfo
SET content = REPLACE(content, 'https://admin.thinkall.net.cn/', 'https://admin.xkpx.com/');

關鍵差異與避坑

資料庫大物件欄位 (TEXT/BLOB/CLOB)大小寫敏感備註
MySQL直接支援視 Collation (_ci 不敏感)InnoDB 8.0+ 可線上 DDL
SQL Server需 CAST(... AS VARCHAR(MAX))視 CollationREPLACE 不支援 TEXT/NTEXT 舊型別
PostgreSQL直接支援敏感 (可用 REPLACE + LOWER)支援正則 regexp_replace
Oracle需 TO_LOB 或 PL/SQL 迴圈敏感建議用 DBMS_LOB

大量資料分批執行模板


-- 避免長事務鎖表、Binlog 膨脹
DECLARE @batch INT = 10000;
WHILE 1=1
BEGIN
  UPDATE TOP (@batch) t_newsinfo
  SET content = REPLACE(content, 'old', 'new')
  WHERE content LIKE '%old%';
  IF @@ROWCOUNT < @batch BREAK;
  WAITFOR DELAY '00:00:01';  -- 釋放鎖喘息
END

單條 UPDATE ... REPLACE 是批次字串清洗的利器,跨庫只需注意大欄位轉型與編碼一致性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved