我需要从 Oracle 中的字符串中删除字符 -、+、(、) 和空格。字符串中的其他字符都是数字。可以做到这一点的函数是 REGEXP_REPLACE。我需要帮助编写正确的正则表达式。
示例:字符串 '23+(67 -90' 应该返回 '236790' 字符串 '123456' 应该返回 '123456'
就像是
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
应该这样做。这将从字符串中删除任何非数字字符。
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/
搜索\D
或[\-\+, ]
替换为空字符串''
regexp_replace 是一个了不起的功能,可以节省大量时间来替换字母数字字符串中的字母以转换为数字。