如何在SQL中使用REPLACE函數取代字串內容教學

作者:帆軟行業化團隊

2025年7月30日 · 13 min read

來源:帆軟
5d29f691863a4a81a5b9471795b8c20f.webp

你在處理資料時,常常會遇到需要將某些字串內容批次替換的情況。REPLACE 函數能幫助你快速完成 SQL取代,不論你用的是 MySQL、SQL Server 或 Oracle,都能輕鬆上手。舉例來說,使用下列語句可以將 email 欄位中的「old.com」全部換成「new.com」:

SELECT REPLACE(email, 'old.com', 'new.com') AS new_email FROM users;

小提醒:在進行 UPDATE 前,請先備份資料,避免誤刪或誤改。

核心要點

  • REPLACE函數能快速替換字串中指定內容,適用於MySQL、SQL Server和Oracle等主流資料庫。
  • 使用REPLACE前,建議先用SELECT測試替換結果,確保正確後再用UPDATE批次修改資料,並務必備份資料。
  • REPLACE函數區分大小寫,處理多個字串時可用巢狀REPLACE達成多重替換效果。
  • REPLACE只改變查詢結果,不會直接修改資料,真正更新資料需搭配UPDATE語句。
  • 根據需求選擇合適函數,簡單替換用REPLACE,多字元一對一替換用TRANSLATE,複雜模式匹配用REGEXP_REPLACE。

SQL取代語法

20988db54750475ea857e05d3aa814c8.webp

基本結構

你在進行SQL取代時,REPLACE函數的標準語法如下:

REPLACE(原始字串, 要取代的內容, 新內容)

這個語法在MySQL、SQL Server和Oracle三種主流資料庫中都能使用。你可以直接在SELECT語句裡操作,也能搭配UPDATE語句批次修改資料。舉個例子,假設你想把「apple」換成「banana」:

SELECT REPLACE('I like apple', 'apple', 'banana');

執行後會得到「I like banana」。這就是最基本的SQL取代操作。

參數說明

REPLACE函數有三個參數,每個參數都有不同的作用:

參數名稱說明
原始字串你要處理的資料內容
要取代的內容你想要被換掉的字串
新內容你想要換成的新字串

你在使用REPLACE時,必須注意以下幾點:

  1. REPLACE函數區分大小寫。你如果要取代「Apple」和「apple」,必須分別處理。
  2. 當你處理NULL值或空字串時,REPLACE的行為會有特殊狀況
    • 如果「要取代的內容」是NULL,系統會直接出現錯誤訊息。
    • 如果「要取代的內容」是空字串(""),系統也會出現錯誤。
    • 如果「新內容」是NULL,REPLACE會把所有「要取代的內容」都移除。
    • REPLACE不會改變原本的字串,而是產生一個新的字串結果。
  3. 不同資料庫系統的REPLACE函數語法幾乎相同,但在Oracle中,REPLACE只能用於字串型態欄位,不能直接處理數值型態。你在SQL Server和MySQL中則可以更彈性地使用。

小提醒:你在進行SQL取代時,建議先用SELECT語句測試結果,確定沒問題再進行UPDATE,這樣可以避免資料誤改。

你只要掌握這些基本結構和參數意義,就能在各種資料庫中靈活運用REPLACE函數,完成各種字串內容的取代需求。

SELECT應用

單欄位取代

你可以直接在SELECT語句中使用REPLACE函數,快速完成SQL取代。假設你有一個users資料表,裡面有email欄位。你想把所有email中的「old.com」換成「new.com」,可以這樣寫:

SELECT REPLACE(email, 'old.com', 'new.com') AS new_email FROM users;

這樣查詢後,你會看到每一筆email都已經把「old.com」換成「new.com」。這種方式很適合你在查詢時即時調整顯示內容,不會影響原本的資料。你也可以用REPLACE處理其他欄位,例如將地址中的「台北市」換成「臺北市」:

SELECT REPLACE(address, '台北市', '臺北市') AS new_address FROM customers;

小提醒:你在查詢時用REPLACE,不會改動資料庫內容,只會改變查詢結果。

多欄位與條件

如果你想同時處理多個欄位,可以在SELECT語句中針對不同欄位分別使用REPLACE。例如:

SELECT 
  REPLACE(name, '王', 'Wang') AS new_name,
  REPLACE(address, '台北', 'Taipei') AS new_address
FROM customers;

你也可以根據不同條件,搭配CASE語句進行條件式取代。這樣可以讓你根據欄位內容決定是否要進行SQL取代。以下用表格整理常見用法:

功能語法範例說明
REPLACE()REPLACE(string, search_string, replace_string)替換字串中特定子字串
CASE語句SELECT CASE WHEN city = '台北' THEN REPLACE(city, '台北', 'Taipei') ELSE city END AS city_name FROM customers;根據條件決定是否取代

這樣你可以靈活處理多欄位、多條件的查詢需求。你只要善用REPLACE和CASE語句,就能讓查詢結果更貼近你的需求。

UPDATE批次取代

2d27130a49774f2884f7bc4fb757712d.webp

批次更新

你想要直接修改資料表中的內容時,可以用UPDATE語句搭配REPLACE函數。這樣你能一次批次更新多筆資料,非常適合大量資料需要SQL取代的情境。舉例來說,假設你要把所有email欄位中的「old.com」換成「new.com」,可以這樣寫:

UPDATE users
SET email = REPLACE(email, 'old.com', 'new.com')
WHERE email LIKE '%old.com%';

這個語句會把所有包含「old.com」的email都換成「new.com」。你可以根據實際需求調整WHERE條件,讓更新更精確。這種批次更新方式能大幅提升資料處理效率。

避免誤操作

在進行批次更新前,你一定要小心檢查,避免誤改資料。你可以按照以下步驟,先用SELECT語句預覽REPLACE的結果

  1. 用LIKE運算子篩選出你要更新的資料列,確認目標範圍。
  2. 使用字串函式(像是LEN()、RIGHT())檢查要替換的字串部分。
  3. 用REPLACE函式模擬更新後的字串,執行SELECT查詢預覽結果。
  4. 確認查詢結果正確後,再將查詢語句改成UPDATE語句,進行批次更新。

這樣做可以有效避免誤改其他資料,確保SQL取代的精確性。

小提醒:在正式執行UPDATE前,請務必備份資料。你可以先用SELECT語句測試,確定結果正確再進行更新。這樣能大幅降低資料遺失或錯誤的風險。

進階用法

多重替換

你有時會遇到需要一次替換多個不同字元或字串的情境。REPLACE函數本身只能一次處理一組字串,但你可以透過巢狀REPLACE達到多重替換的效果。這種方法很實用,尤其在處理特殊符號或多個字元時。

  1. 你可以將REPLACE函數層層包裹,依序替換多個目標。例如,將字串3*[4+5]/{6-8}中的[]{}分別換成()

    SELECT REPLACE(REPLACE(REPLACE(REPLACE('3*[4+5]/{6-8}', '[', '('), ']', ')'), '{', '('), '}', ')');
    
  2. 如果你要將欄位中的A、C、D分別換成5、9、4,也可以這樣寫:

    SELECT Name,
           GRP,
           REPLACE(REPLACE(REPLACE(GRP, 'A', '5'), 'C', '9'), 'D', '4') AS GRPCODE
    FROM #temp;
    
  3. 這種巢狀REPLACE方式,讓你能靈活處理多重替換需求。SQL Server 2017之後,你也可以考慮用TRANSLATE函數,讓多字元一對一替換更簡單。

小提醒:巢狀REPLACE雖然方便,但層數太多時,語句會變得難以維護。你可以先規劃好替換順序,避免出現預期外的結果。

大小寫敏感

REPLACE函數在大多數資料庫中都區分大小寫。你如果想同時替換「Apple」和「apple」,必須分別寫兩個REPLACE。例如:

SELECT REPLACE(REPLACE(fruit, 'Apple', '香蕉'), 'apple', '香蕉') AS new_fruit FROM fruits;

你在處理英文資料時,特別要注意這一點。如果想忽略大小寫,可以先將字串轉成同一種大小寫(如全部轉小寫),再進行替換。

注意:不同資料庫的預設大小寫敏感設定可能不同。你可以查詢資料庫的COLLATION設定,或用UPPER()/LOWER()輔助處理。

與TRANSLATE比較

你常常會想知道,什麼時候該用REPLACE,什麼時候該用TRANSLATE或REGEXP_REPLACE?下表幫你快速比較三種函數的特點

函數名稱功能描述適用場景
REPLACE將字串中指定的子字串全部替換成另一字串簡單字串替換,如更新資料表中特定欄位字串
TRANSLATE同時替換多個單一字元,依序將字元替換成另一組字元多字元一對一替換
REGEXP_REPLACE利用正規表達式搜尋符合特定模式的字串並替換複雜字串模式匹配與替換

你如果只要簡單替換一段字串,可以用REPLACE。如果你要同時替換多個單一字元,TRANSLATE會更有效率。遇到複雜的字串規則,REGEXP_REPLACE才是最佳選擇。

建議:你可以根據實際需求選擇最適合的函數,這樣能讓你的SQL語句更簡潔、效率更高。

實務場景

批次修正

你在資料遷移或系統升級時,常常需要批次修正欄位內容。比方說,舊系統的電話格式為「0912-345-678」,新系統要求移除所有破折號。你可以利用REPLACE函數快速完成這項任務:

UPDATE users
SET phone = REPLACE(phone, '-', '')
WHERE phone LIKE '%-%';

這樣你就能一次修正所有電話欄位,省下大量人工處理時間。這種SQL取代方式,讓你在批量資料修正時更有效率。

格式調整

你在整合不同來源的資料時,經常會遇到格式不一致的問題。例如,有些地址欄位寫成「台北市」,有些寫成「臺北市」。你可以用REPLACE統一格式:

UPDATE customers
SET address = REPLACE(address, '台北市', '臺北市')
WHERE address LIKE '%台北市%';

這樣你就能確保資料庫中的地址格式一致,有助於後續分析與查詢。

資料清理

你在進行資料清理時,常常需要移除多餘的符號或錯誤字元。舉例來說,有些姓名欄位不小心多了空白或特殊符號。你可以這樣處理:

UPDATE employees
SET name = REPLACE(name, ' ', '')
WHERE name LIKE '% %';

這個方法能幫你快速清理資料,提升資料品質。你只要善用REPLACE,就能讓資料更乾淨、更容易管理。

小提醒:每次進行批次SQL取代前,請先備份資料,避免不可逆的錯誤。

 

你已經學會REPLACE函數的核心用法。這個函數讓你能快速處理字串內容,提升資料處理效率。你在操作時,請記得這些重點:

  • REPLACE函數主要協助你取代已存在的SQL函式,方便你更新函式邏輯,確保資料處理流程符合最新需求。
  • 執行SQL取代前,先用SELECT語句測試結果,再進行UPDATE,並務必備份資料。
  • 持續學習其他SQL字串處理技巧,像是TRANSLATE或REGEXP_REPLACE,能讓你解決更多複雜的資料問題。

多練習、多測試,你會更熟悉SQL字串處理的各種情境!

FAQ

REPLACE函數可以用來處理數字欄位嗎?

你只能用REPLACE處理字串型態欄位。數字欄位需要先轉成字串,才能進行取代。

如果資料中有NULL值,REPLACE會怎麼處理?

REPLACE遇到NULL值時,結果也會是NULL。你可以用COALESCE()ISNULL()先處理NULL。

REPLACE可以同時取代多個不同字串嗎?

你需要巢狀使用REPLACE,才能一次取代多個不同字串。每次只能指定一組要取代的內容。

REPLACE會改變原本的資料嗎?

你在SELECT語句中使用REPLACE,只會改變查詢結果。你要用UPDATE語句,才會真正修改資料。

REPLACE和TRANSLATE有什麼不同?

函數適用情境
REPLACE替換一段字串
TRANSLATE替換多個單一字元

小提醒:TRANSLATE無法處理多字元字串,只能一對一字元替換。

帆軟產品免費試用

企業戰情室報表軟體

企業戰情室報表軟體

複雜報表/戰情室/資料填報/數位孿生

企業商業智慧BI軟體

企業商業智慧BI軟體

自助資料處理/Dashboard/探索分析

一站式資料整合平台

一站式資料整合平台

資料同步/ETL資料開發/API資料服務

免費資源下載

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

我們很樂意傾聽你的需求,解答您的疑問,並提供專業建議, 助力您的企業實現智慧轉型!

×

意見回饋

姓名

電郵

公司

國家/地區

-- select an option --

電話

投訴原因

請選擇投訴原因

代理商問題
產品問題
技術支援服務問題
專案問題
銷售問題
商務問題
行銷問題
其他

投訴內容