如何在oracle中获取下划线之间的字符串值

时间:2017-08-08 04:35:04

标签: oracle11g

我有一个名为"RAM_ESH_BABU_SAR"的字符串。

我的要求是从第一个字符到第二个下划线,即RAM_ESH获取值,并且还从输入字符串SAR获取最后一个下划线之后的值。

请建议我查询。我试过以下代码。

SELECT
    REGEXP_SUBSTR( 'RAM_ESH_BABU_SAR', '[^_]+', 1, 2 )
FROM
    dual

1 个答案:

答案 0 :(得分:0)

您需要使用源字符串中第二个和第三个下划线的位置,因此我建议在SUBSTR()中使用REGEXP_INSTR()。对于第三个下划线之后的字符串,您还需要LENGTH(),因为您希望从结束字符向后工作(即,负数个字符作为SUBSTR()中的第二个参数。

SELECT
      substr(x,1,REGEXP_INSTR( x, '[_]+', 1, 2 )-1)         as part1
    , substr(x,REGEXP_INSTR( x, '[_]+', 1, 3 ) - LENGTH(x)) as part2
FROM
    (select 'RAM_ESH_BABU_SAR' x from dual)
PART1   | PART2
:------ | :----
RAM_ESH | SAR  

dbfiddle here