REGEXP_SUBSTR 标量函数

REGEXP_SUBSTR 标量函数返回与正则表达式模式匹配的字符串的一个子串实例。

Read syntax diagramSkip visual syntax diagramREGEXP_SUBSTR(source-string ,pattern-expression ,start,occurrence,flags,group ,CODEUNITS32,CODEUNITS16OCTETS )

该模式是 SYSIBM。

source-string
用于指定要在其中进行搜索的字符串的表达式。 此表达式必须返回内置字符串,图形字符串,数字值, 布尔值 或日期时间值。 在对函数求值之前,会将数字,布尔值 或日期时间值隐式强制转换为 VARCHAR。 字符串不能指定 FOR BIT DATA 属性 (SQLSTATE 42815)。
pattern-expression
用于指定作为搜索模式的正则表达式字符串的表达式。 此表达式必须返回内置字符串,图形字符串,数字值, 布尔值 或日期时间值。 在对函数求值之前,会将数字,布尔值 或日期时间值隐式强制转换为 VARCHAR。 CLOB 或 DBCLOB 表达式的长度不得大于 VARCHAR 或 VARGRAPHIC 数据类型的最大长度。 字符串不能指定 FOR BIT DATA 属性 (SQLSTATE 42815)。
start
用于指定在 source-string 中开始搜索的位置的表达式。 表达式必须返回内置字符串,图形字符串, Boolean , 或数字值。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,它将隐式强制转换为 INTEGER。 整数的值必须大于或等于 1。 如果指定了 OCTETS 并且源字符串是图形数据,那么整数的值必须为奇数 (SQLSTATE 428GC)。 缺省起始值为 1。 请参阅 CODEUNITS16、CODEUNITS32 或 OCTETS 的参数描述,以了解适用于起始位置的字符串单位。
occurrence
一个表达式,用于指定要在 source-string 中搜索的模式表达式实例。 表达式必须返回内置字符串,图形字符串, Boolean , 或数字值。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,它将隐式强制转换为 INTEGER。 出现值必须大于或等于 1。 缺省实例值为 1,表示仅考虑第一个模式表达式实例。
flags
用于指定可控制模式匹配方面的标志的表达式。 该表达式必须返回未指定 FOR BIT DATA 属性的内置字符串 (SQLSTATE 42815)。 该字符串可以包含一个或多个有效标志值,并且标志值组合必须是有效的组合 (SQLSTATE 2201T)。 空字符串与值“c”相同。 缺省标志值为“c”。
表 1. 支持的标志值
标志值 描述
c 指定匹配区分大小写。 如果未指定“c”或“i”,那么此标志是缺省值。 此值不能与值“i”一起指定。
i 指定匹配不区分大小写。 此值不能与值“c”一起指定。
m 指定输入数据可以包含多行。 缺省情况下,模式中的“^”仅匹配输入字符串的开头;模式中的“$”仅匹配输入字符串的结尾。 如果设置了此标志,那么“^”和“$”也会匹配输入字符串中每一行的开头和结尾。
n 指定 "." 模式中的字符与输入字符串中的行终止符匹配。 缺省情况下, "." 模式中的字符与行终止符不匹配。 输入字符串中的回车符和换行符对充当单行终止符,并与单个 "." 匹配。 在一个模式中。
s 指定 "." 模式中的字符与输入字符串中的行终止符匹配。 此值是“n”值的同义词。
x 指定将忽略模式中的空格字符(除非已转义)。
group
一个表达式,用于指定要返回的源字符串中模式表达式的捕获组。 表达式必须返回内置字符,二进制或图形字符串或布尔值。 如果该值不是 INTEGER 类型,那么在对该函数进行求值之前,它将隐式强制转换为 INTEGER。 组值必须大于或等于 0 ,并且不得大于模式表达式中的捕获组数 (SQLSTATE 22546)。 缺省组值为 0 ,这指示将返回与整个模式匹配的字符串。
CODEUNITS16、CODEUNITS32 或 OCTETS
指定起始值的字符串单位:
  • CODEUNITS16 指定以 16 位 UTF-16 代码单元表示起始值。
  • CODEUNITS32 指定以 32 位 UTF-32 代码单元表示起始值。 这是缺省值。
  • OCTETS 指定以字节表示起始值。

如果将字符串单位指定为 CODEUNITS16 或 OCTETS,并且源字符串的字符串单位为 CODEUNITS32,那么将返回一个错误 (SQLSTATE 428GC)。

有关更多信息,请参阅 字符串中的 "内置函数中的字符串单元"。

结果

函数的结果是字符串。 该字符串的数据类型与源字符串的数据类型相同,但 CHAR (变为 VARCHAR) 和 GRAPHIC (变为和 VARGRAPHIC) 除外。 结果数据类型的长度属性与源字符串的长度属性相同。 结果的实际长度是与模式表达式匹配的字符串中出现的长度。 如果未找到模式表达式,那么结果为空值。

REGEXP_SUBSTR 函数的结果可以为空。 如果任何参数为空值,那么结果为空值。

注意

  • 将通过 Unicode 国际组件 (ICU) 正则表达式接口来完成正则表达式处理。
  • 非 Unicode 数据库的注意事项
    • 正则表达式模式仅支持半宽控制字符; 请对模式表达式参数使用字符串数据类型。 即使对源字符串参数使用图形字符串数据类型,也可以对模式表达式参数使用字符串数据类型。
    • 如果模式表达式参数是图形字符串数据类型,那么源字符串参数必须是图形字符串数据类型。

示例

  1. 返回与 "o" 之前的任何字符匹配的字符串。
    SELECT REGEXP_SUBSTR('hello to you', '.o',1,1) 
       FROM sysibm.sysdummy1
    结果为 "lo"。
  2. 返回与 "o" 之前的任何字符匹配的第二个字符串实例。
    SELECT REGEXP_SUBSTR('hello to you', '.o',1,2) 
       FROM sysibm.sysdummy1
    结果为 "to"。
  3. 返回与 "o" 之前的任何字符匹配的第三个字符串实例。
    SELECT REGEXP_SUBSTR('hello to you', '.o',1,3) 
       FROM sysibm.sysdummy1
    结果是 "yo"。