Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 函数 » SQL 函数 (P-Z)

 

REGEXP_SUBSTR 函数 [String]

使用正则表达式从字符串中抽取子串。

语法
REGEXP_SUBSTR( expression, 
regular-expression 
[, start-offset [ , occurrence-number [, escape-expression ] ] ] )
参数
  • expression   被搜索的字符串。

  • regular-expression   尝试匹配的模式。有关正则表达式语法的详细信息,请参见正则表达式概述

  • start-offset   开始搜索时相对于 expression 的偏移。start-offset 以正整数表示,表示从字符串的左端数的字符数。缺省值为 1(字符串的起点)。

  • occurrence-number   expression 中有多个匹配项时,指定一个整数来表示要定位在第几个出现的匹配项。例如,3 表示查找第三个出现的匹配项。缺省值为 1。

  • escape-expression   regular-expression 所使用的转义字符。缺省为反斜线字符 (\)。

返回值

LONG VARCHAR

注释

如果未找到 regular-expression,则 REGEXP_SUBSTR 返回 NULL。

与 REGEXP 搜索条件类似,REGEXP_SUBSTR 函数使用代码点进行匹配和范围评估。这意味着数据库区分大小写并不影响结果。有关 REGEXP_SUBSTR 如何执行匹配和集评估的详细信息,请参见LIKE、REGEXP 和 SIMILAR TO:字符比较上的差异

当针对只包含一个子字符类的字符类进行匹配时,请将外层方括号和子字符类的方括号一同包括进去(例如,REGEXP_SUBSTR (expression, '[[:digit:]]'))。有关子字符类匹配的详细信息,请参见正则表达式:特殊子字符类

另请参见
标准和兼容性
  • SQL/2003   服务商扩充。

示例

以下示例将 Employees.Street 列中的值分为 street number 和 street name 两部分:

SELECT REGEXP_SUBSTR( Street, '^\S+' ) as street_num, 
 REGEXP_SUBSTR( Street, '(?<=^\S+\s+).*$' ) AS street_name 
    FROM Employees;
street_num street_name
9 East Washington Street
7 Pleasant Street
539 Pond Street
1244 Great Plain Avenue
... ...

要确定当前连接的 IP 地址是否在 IP 地址的范围之内(在本例中,为 10.25.101.xxx 或 10.25.102.xxx),可以执行以下语句:

IF REGEXP_SUBSTR( CONNECTION_PROPERTY( 'NodeAddress' ), '\\d+\\.\\d+\\.\\d+' )
   IN ( '10.25.101' , '10.25.102' ) THEN 
      MESSAGE 'In range' TO CLIENT;
ELSE 
      MESSAGE 'Out of range' TO CLIENT;
END IF;