日期:2014-05-16  浏览次数:20389 次

Oracle 的 REPLACE 和 REGEXP_REPLACE

REPLACE 函数是用另外一个值来替代串中的某个值。例如,可以用一个匹配数字来替代字母的每一次出现。REPLACE 的格式如下所示:

  1. REPLACE?(?char,?search_string?[,?replace_string])?

如果没有指定replace_string 变量的值,那么当发现search_string 变量的值时,就将其删除。输入可以为任何字符数据类型——CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB或NCLOB。下面是一个示例:

  1. REPLACE('GEORGE',?'GE',?'EG')?=?EGOREG ?
  2. REPLACE('GEORGE',?'GE',?NULL)?=?OR?

如果搜索串的长度不为零,则可以知道搜索串在某个串中出现的次数。首先,计算源串的长度:

  1. LENGTH('GEORGE')?

然后,计算源串删除搜索串以后的长度:

  1. LENGTH(REPLACE('GEORGE',?'GE',?NULL))?

接着用搜索串的长度除以两次的长度之差,就可以得到搜索串出现的次数:

  1. select?LENGTH('GEORGE') ?
  2. -?LENGTH(REPLACE('GEORGE',?'GE',?NULL)) ?
  3. / ?
  4. LENGTH('GE')?AS?Counter ?
  5. from?DUAL; ?
  6. COUNTER ?
  7. -------?

REGEXP_REPLACE 函数在几个方面扩展了REPLACE 函数的功能。它支持