2011-12-02 140 views
2

我有来此格式甲骨文REGEXP_SUBSTR。 - 如何提取文本排除标记字符

Transaction 'pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)' failed due to connection error 

我需要提取在这个例子之间的文字和(

pqr_111_xyz_222字符串

下面的查询返回“pqr_111_xyz_222(

select regexp_substr('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '''.+\(') from dual; 

如何修改正则表达式(或使用任何其他技术,可以包括在这个单一的查询),以便标记'和(被排除在外,我只得到pqr_111_xyz_222

回答

4

你可以使用REGEXP_REPLACE代替:

regexp_replace('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '.*''(.+)\(.*', '\1') 
+0

+1。没有任何直接的方法可以用oracle来做到这一点。 – FailedDev

+0

完美的解决方案。 – akirekadu

1

你可以环绕函数调用SUBSTR和INSTR去除结果的第一个和最后一个字符。缺点是我认为你必须额外调用regexp_substr以获得结果的长度传递给substr/instr。

1
select regexp_substr('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '\w+',1,2) from dual; 
+0

聪明的解决方案。 'regexp_substr'在这里用于不是众所周知的情况。 – Stephan