4

我需要从 Oracle 中的字符串中删除字符 -、+、(、) 和空格。字符串中的其他字符都是数字。可以做到这一点的函数是 REGEXP_REPLACE。我需要帮助编写正确的正则表达式。

示例:字符串 '23+(67 -90' 应该返回 '236790' 字符串 '123456' 应该返回 '123456'

4

4 回答 4

7

就像是

SQL> ed
Wrote file afiedt.buf

  1  with data as (
  2    select 'abc123def456' str from dual union all
  3    select  '23+(67 -90' from dual union all
  4    select '123456' from dual
  5  )
  6  select str,
  7         regexp_replace( str, '[^[:digit:]]', null ) just_numbers
  8*   from data
SQL> /

STR          JUST_NUMBERS
------------ --------------------
abc123def456 123456
23+(67 -90   236790
123456       123456

应该这样做。这将从字符串中删除任何非数字字符。

于 2012-10-23T00:33:14.570 回答
2

regexp_replace 是一个了不起的功能,但它有点难。

您可以使用 TRANSLATE 函数替换字符串中的多个字符。TRANSLATE 函数与 REPLACE 的不同之处在于,TRANSLATE 函数提供单个字符的一对一替换,而 REPLACE 允许您将一个字符串替换为另一个字符串。

例子:

SELECT TRANSLATE('23+(67 -90', '1-+() ', '1') "Replaced" FROM DUAL;

输出:

236790

在此示例中,“1”将被“1”替换,“-+()”将被替换为空值,因为我们没有在“to string”中为其提供任何对应的字符。该语句还可以在不使用 regexp 的情况下回答您的问题。

你会认为你可以使用空字符串作为最后一个参数,但这不起作用,因为当我们将 NULL 参数传递给 TRANSLATE 函数时,它返回 null,因此我们没有得到想要的结果。

因此,如果我需要替换一个字符,我会使用 REPLACE,如果我想替换多个字符,我会使用 TRANSLATE。

资料来源:https ://decipherinfosys.wordpress.com/2007/11/27/removing-un-wanted-text-from-strings-in-oracle/

于 2015-07-15T10:09:14.367 回答
0

搜索\D[\-\+, ]替换为空字符串''

于 2012-10-23T00:37:51.247 回答
0

regexp_replace 是一个了不起的功能,可以节省大量时间来替换字母数字字符串中的字母以转换为数字。

于 2015-06-04T13:55:39.613 回答