REGEXP_SUBSTR(Transact-SQL) 预览版

适用于:SQL Server 2025 (17.x) 在Microsoft Fabric 中预览 Azure SQL 数据库Azure SQL 托管实例 SQL 数据库

注释

作为预览版功能,本文中介绍的技术受制于 Microsoft Azure 预览版补充使用条款

返回与正则表达式模式匹配的字符串的子字符串的一个匹配项。 如果未找到匹配项,则返回 NULL

REGEXP_SUBSTR
     (
      string_expression,
      pattern_expression [, start [, occurrence [, flags [, group ] ] ] ]
     )

论据

string_expression

字符串的表达式。

可以是字符串的常量、变量或列。

数据类型: charncharvarcharnvarchar

注释

对于REGEXP_LIKEREGEXP_COUNT参数,函数REGEXP_INSTR函数支持 LOB 类型(varchar(max)nvarchar(max)最多 2 MB。

pattern_expression

要匹配的正则表达式模式。 通常是文本文本。

数据类型: charncharvarcharnvarcharpattern_expression 支持最大字符长度为 8,000 字节。

开始

指定搜索字符串中搜索的起始位置。 可选。 类型为 intbigint

编号是基于 1 的,这意味着表达式中的第一个字符是 1 且值必须是 >= 1。 如果起始表达式小于 1,则返回错误。 如果 start 表达式大于 string_expression的长度,则函数返回 NULL。 默认值为 1

事件

一个表达式(正整数),指定要在源字符串中搜索或替换模式表达式的匹配项。 默认值为 1。 搜索 string_expression的第一个字符。 对于正整数 n,它将搜索第 n 个匹配项,从第一个匹配项之后的第一个字符开始查找pattern_expression,依此类推。

标志

指定用于搜索匹配项的修饰符的一个或多个字符。 类型为 varcharchar,最多包含 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

指定pattern_expression捕获组(子表达式)确定要返回string_expression内的位置。 捕获组(子表达式)是括在括号中的模式片段,可以嵌套。 捕获组按其左括号显示的顺序进行编号。 组的数据类型为整数,该值必须大于或等于 0,并且不能大于pattern_expression中的捕获组数(子表达式)。 默认组值为 0,指示位置基于与整个模式匹配的字符串。

返回值

字符串。

例子

从电子邮件地址中提取域名。

SELECT REGEXP_SUBSTR(EMAIL, '@(.+)$', 1, 1, 'i', 1) AS DOMAIN
FROM CUSTOMERS;

查找以元音开头的句子中的第一个单词。

SELECT REGEXP_SUBSTR(COMMENT, '\b[aeiou]\w*', 1, 1, 'i') AS WORD
FROM FEEDBACK;

获取信用卡号的最后四位数字。

SELECT REGEXP_SUBSTR(CARD_NUMBER, '\d{4}$') AS LAST_FOUR
FROM PAYMENTS;