适用于:SQL Server 2025 (17.x) 在
Microsoft Fabric 中预览
Azure SQL 数据库
Azure SQL 托管实例 SQL 数据库
注释
作为预览版功能,本文中介绍的技术受制于 Microsoft Azure 预览版补充使用条款。
返回由替换字符串替换的已修改源字符串,其中找到了正则表达式模式。 如果未找到匹配项,该函数将返回原始字符串。
REGEXP_REPLACE
(
string_expression,
pattern_expression [, string_replacement [, start [, occurrence [, flags ] ] ] ]
)
论据
string_expression
字符串的表达式。
可以是字符串的常量、变量或列。
数据类型: char、 nchar、 varchar 或 nvarchar。
注释
对于REGEXP_LIKE
REGEXP_COUNT
参数,函数REGEXP_INSTR
和函数支持 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')
返回:
(123) 456-7890
如果提供的 \n
in string_replacement
大于 pattern_expression中的组数,则该函数将忽略该值。
例如:
REGEXP_REPLACE('123-456-7890', '(\d{3})-(\d{3})-(\d{4})', '(\1) (\4)-xxxx')
返回:
(123) ()-xxxx
开始
指定搜索字符串中搜索的起始位置。 可选。 类型为 int 或 bigint。
编号是基于 1 的,这意味着表达式中的第一个字符是 1
且值必须是 >= 1
。 如果起始表达式小于 1
,则返回错误。 如果 start 表达式大于 string_expression的长度,则函数将返回 string_expression。 默认值为 1
。
事件
一个表达式(正整数),指定要在源字符串中搜索或替换模式表达式的匹配项。 默认值为 1
。 搜索 string_expression的第一个字符。 对于正整数 n
,它将搜索 nth
从第一个匹配项之后的第一个字符开始的 pattern_expression,依此类推。
标志
指定用于搜索匹配项的修饰符的一个或多个字符。 类型为 varchar 或 char,最多包含 30 个字符。
例如,ims
。 默认值为 c
。 如果提供了空字符串 (' ')
,它将被视为默认值 ('c')
。 提供 c
或任何其他字符表达式。 如果标志包含多个相互矛盾的字符,则 SQL Server 使用最后一个字符。
例如,如果指定 ic
正则表达式返回区分大小写的匹配。
如果值包含除 受支持标志值中列出的字符以外的字符,则查询将返回如下例所示的错误:
Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
支持的标志值
旗帜 | DESCRIPTION |
---|---|
i |
不区分大小写 (默认值 false ) |
m |
多行模式: ^ 和 $ 匹配开始/结束行,以及开始/结束文本(默认值 false ) |
s |
让 . 匹配 \n (默认值 false ) |
c |
区分大小写(默认值 true ) |
返回值
表达式。
例子
替换产品名称中或a
替换为e
所有匹配项X
。
SELECT REGEXP_REPLACE(PRODUCT_NAME, '[ae]', 'X', 1, 0, 'i')
FROM PRODUCTS;
替换产品说明中的第一个匹配项cat
或dog
替换为pet
SELECT REGEXP_REPLACE(PRODUCT_DESCRIPTION, 'cat|dog', 'pet', 1, 1, 'i')
FROM PRODUCTS;
将电话号码的最后四位数字替换为星号
SELECT REGEXP_REPLACE(PHONE_NUMBER, '\d{4}$', '****')
FROM CUSTOMERS;