在oracle中提取括号外的数据

时间:2016-01-04 06:19:10

标签: regex oracle plsql

我有这个值:(203)1669

我的要求是提取括号外的数据。

我想对此Oracle查询使用正则表达式。

非常感谢!

4 个答案:

答案 0 :(得分:4)

您可以使用Oracle REGEXP_REPLACE()函数,并匹配括号外的组。

SELECT REGEXP_REPLACE(phone_number, '\([[:digit:]]+\)(.*)', '\1') AS newValue
FROM your_table

答案 1 :(得分:0)

您可以使用SUBSTR和INSTR功能的组合。

select substr('(203)1669', instr('(203)1669',')')+1) from dual

答案 2 :(得分:0)

此示例使用REGEXP_SUBSTR(),并且REGEX明确遵循您在关闭paren和行尾之间获取4位数的规范。如果可能有不同的位数,请将{4}替换为+一位或多位数字:

SQL> with tbl(str) as (
      select '(203)1669' from dual
    )
    select regexp_substr(str, '\)(\d{4})$', 1, 1, NULL, 1) nbr
    from tbl;

NBR
----
1669

SQL>

答案 3 :(得分:-1)

对于你提到的模式,这应该有效。

select  
rtrim(ltrim(substr(phone_number,instr(phone_number,')')+1,length(phone_number)))) 
as derived_phone_no
from 
(select '(123)456' as phone_number from dual union all
 select '(567)99084' as phone_number from dual)

首先,我获得)的位置,然后从substr ) +的位置获取1,直到字符串的长度为止。作为最佳实践,您可以使用修剪功能。