在oracle中提取括号外的数据
Posted
技术标签:
【中文标题】在oracle中提取括号外的数据【英文标题】:Extract data outside of parentheses in oracle 【发布时间】:2016-01-04 06:19:09 【问题描述】:我有这个值:(203)1669
我的要求是提取括号外的数据。
我想对这个 Oracle 查询使用正则表达式。
非常感谢!
【问题讨论】:
有什么想要得到你的愿望的尝试吗? 模式是否始终相同。我的意思是你能得到类似123(456)
嗨@Utsav 模式总是一样的。 (203)XXXX
@Shikha - 好的。对于您提到的模式,请参阅此answer。我添加了trim
以防万一。如果需要,您可以将其删除。
【参考方案1】:
您可以使用Oracle REGEXP_REPLACE()
函数,匹配括号外的组。
SELECT REGEXP_REPLACE(phone_number, '\([[:digit:]]+\)(.*)', '\1') AS newValue
FROM your_table
【讨论】:
想想,你也可以试试(phone_number, '.*[^[:digit:]](.*)', '\1')
【参考方案2】:
您可以使用 SUBSTR 和 INSTR 函数的组合。
select substr('(203)1669', instr('(203)1669',')')+1) from dual
【讨论】:
【参考方案3】:此示例使用 REGEXP_SUBSTR() 并且 REGEX 明确遵循您的规范,即获取右括号和行尾之间的 4 位数字。如果位数可能不同,请将4
替换为+
以获得一位或多位数字:
SQL> with tbl(str) as (
select '(203)1669' from dual
)
select regexp_substr(str, '\)(\d4)$', 1, 1, NULL, 1) nbr
from tbl;
NBR
----
1669
SQL>
【讨论】:
【参考方案4】:对于您提到的模式,这应该有效。
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)
这里首先我得到)
的位置,然后从)
+
1
的位置得到substr
直到字符串的长度。作为最佳实践,您可以使用修剪功能。
【讨论】:
非常感谢您提供快速解决方案!以上是关于在oracle中提取括号外的数据的主要内容,如果未能解决你的问题,请参考以下文章