我有这个值:(203)1669
我的要求是提取括号外的数据。
我想对此Oracle查询使用正则表达式。
非常感谢!
答案 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
,直到字符串的长度为止。作为最佳实践,您可以使用修剪功能。