適用於: SQL Server 2025 (17.x)
Azure SQL Database Azure
SQL Managed Instance
SQL database in Microsoft Fabric
傳回由取代字串所取代的修改來源字串,其中找到正則表示式模式的出現。 如果找不到相符專案,函式會傳回原始字串。
REGEXP_REPLACE
(
string_expression,
pattern_expression [ , string_replacement [ , start [ , occurrence [ , flags ] ] ] ]
)
Note
規則運算式可在 Azure SQL 受控執行個體中使用 SQL Server 2025 或一 律up-to日期更新原則。
Arguments
string_expression
字元字串的表達式。
可以是字元字串的常數、變數或數據行。
數據類型: char、 nchar、 varchar 或 nvarchar。
Note
REGEXP_LIKE、 和REGEXP_COUNTREGEXP_INSTR函數支援 string_expression 參數的 LOB 類型 (varchar(max) 和 nvarchar(max)) 最多 2 MB。
pattern_expression
要比對的正則表達式模式。 通常是文字常值。
數據類型: char、 nchar、 varchar 或 nvarchar。 pattern_expression 支援最大字元長度 8,000 個字節。
string_replacement
字串表示式,指定比對子字串的取代字串串,並取代模式所比對的子字串。 string_replacement可以是 char、varchar、nchar 和 nvarchar 數據類型。 如果指定空字串 ('') ,則函數會移除所有相符的子字串,並傳回產生的字串。 預設的取代字串是空字串 ('')。
string_replacement可以包含 \n,其中 n 是 1 到 9,表示應該插入符合模式第 n 個括弧組 (subexpression) 的來源子字元串,而且可以包含 & ,表示應該插入符合整個模式的子字元串。 如果您需要在取代文字中放置常值反斜杠,請寫入 \ 。
比如
REGEXP_REPLACE('123-456-7890', '(\d{3})-(\d{3})-(\d{4})', '(\1) \2-\3')
Returns:
(123) 456-7890
如果 中\n提供的 string_replacement 大於pattern_expression中的群組數目,則函式會忽略值。
例如:
REGEXP_REPLACE('123-456-7890', '(\d{3})-(\d{3})-(\d{4})', '(\1) (\4)-xxxx')
Returns:
(123) ()-xxxx
start
指定搜尋字串內搜尋的起始位置。 Optional. 類型為 int 或 bigint。
編號是以 1 為基礎,這表示表達式中的第一個字元是 1 ,而且值必須是 >= 1。 如果啟動表達式小於 1,則傳回錯誤。 如果 start 表達式大於 string_expression 長度,則函 式會傳回string_expression。 預設值為 1。
occurrence
表達式(正整數),指定要搜尋或取代來源字串內的模式運算式出現次數。 預設值為 1。 搜尋 string_expression的第一個字元。 若為正整數 n,它會搜尋 nth 從第一個出現 pattern_expression之後的第一個字元開始,依此類推。
flags
一或多個字元,指定用於搜尋相符專案的修飾詞。 類型為 varchar 或 char,最多 30 個字元。
例如: ims 。 預設值為 c。 如果提供空字串 (' ') ,則會將它視為預設值 ('c')。 提供 c 或任何其他字元表達式。 如果旗標包含多個相互矛盾的字元,則 SQL Server 會使用最後一個字元。
例如,如果您指定 ic regex 會傳回區分大小寫的比對。
如果值包含支援 旗標值所列的字元,查詢會傳回錯誤,如下列範例所示:
Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
支援的旗標值
| Flag | Description |
|---|---|
i |
不區分大小寫 (預設值 false) |
m |
多行模式: ^ 與 $ 比對開始/結束文字之外,還比對開始/結束文字 (預設值 false) |
s |
讓 . 比對 \n (預設值 false) |
c |
區分大小寫 (預設值 true) |
返回值
Expression.
Examples
將或 ae 的所有專案X取代為產品名稱中的 。
SELECT REGEXP_REPLACE(PRODUCT_NAME, '[ae]', 'X', 1, 0, 'i')
FROM PRODUCTS;
將 或 catdog 的第一個出現專案pet取代為產品描述中的
SELECT REGEXP_REPLACE(PRODUCT_DESCRIPTION, 'cat|dog', 'pet', 1, 1, 'i')
FROM PRODUCTS;
以星號取代電話號碼的最後四個數位
SELECT REGEXP_REPLACE(PHONE_NUMBER, '\d{4}$', '****')
FROM CUSTOMERS;