Oracle10gR2中用正则表达式搜索文本

文章作者 100test 发表时间 2007:05:07 16:25:09
来源 100Test.Com百考试题网


  Oracle 10g Release 1为了与文本字符串中的模式相匹配,添加了对POSIX正则表达式的支持。Release 2用一些附加的可以在Perl找到的元字符,扩充了最初的模式元字符目录。如果你正在用Oracle 10gR2开发脚本,那么就看看本文里这些搜索文本的有效捷径。

  首先,简短概述一下:函数REGEXP_LIKE针对一种模式搜索一个字符列,返回一个TRUE或FALSE的逻辑值。你可以在SQL SELECT语句的WHERE子句中用它来限定行数,或者在PL/SQL块中检查数据的有效性。相似的函数——REGEXP_REPLACE、REGEXP_SUBSTR和REGEXP_INSTR——都能够在执行其他常见的字符串操作时,接受POSIX正则表达式。

  Perl为POSIX“类”表达式添加了一些简短的模式。例如,在标准的POSIX正则表达式中,你用符号‘[[:digit:]]’来表示一个从0到9的阿拉伯数字。在Perl中,它被简化成‘\d’。大括号表示一次重复计数,因此,‘\d{3}’规定了三个阿拉伯数字。要表示你想要一个除阿拉伯数字之外的字符,POSIX模式是‘[^[:digit:]]’。但是在Perl中,它只表示为‘\D’。

  类似的捷径对于空白也存在:‘\s’与‘[[:space:]]’相对应,非空白:‘\S’对应‘[^[:space:]]’。列表A中显示了一个取自人力资源方案的例子。

列表A:

SQL> SELECT last_name2FROM employees3WHERE REGEXP_LIKE(last_name, [[:space:]]).

LAST_NAME

-------------------------

De Haan

SQL> SELECT last_name2FROM employees3WHERE REGEXP_LIKE (last_name, \s).

LAST_NAME

-------------------------

De Haan

SQL> SELECT last_name2FROM employees3WHERE REGEXP_LIKE (last_name, \S)4AND ROWNUM < 11.

LAST_NAME

-------------------------

AbelAnde

Atkinson

Austin

BaerBaida

Banda

Bates

Bell

Bernstein

10 rows 0selected.



相关文章


Oracle10gR2中用正则表达式搜索文本
利用SQL*Plus复制遗留的Oracle数据表
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛