Sql 拆分字符串并在oracle中查找子字符串索引

Sql 拆分字符串并在oracle中查找子字符串索引,sql,oracle,plsql,plsqldeveloper,Sql,Oracle,Plsql,Plsqldeveloper,我有一根这样的绳子 测试文件名 我想要ABCD的索引 我试过了 select INSTR('TESTAPP_B_ABCD_JP_0_FILENAME', '_ABCD_') from dual; 它返回10..这意味着它给了我一个计算字符数的索引 我希望输出为3,拆分字符串TESTAPP1、B2、ABCD3 请指导。这种方法实际上是通过首先使用u作为分隔符标记字符串来工作的 WITH MY_DATA(str) AS ( SELECT 'TESTAPP_B_ABCD_JP_0_FILENAM

我有一根这样的绳子 测试文件名 我想要ABCD的索引 我试过了

select INSTR('TESTAPP_B_ABCD_JP_0_FILENAME', '_ABCD_') from dual;
它返回10..这意味着它给了我一个计算字符数的索引

我希望输出为3,拆分字符串TESTAPP1、B2、ABCD3


请指导。

这种方法实际上是通过首先使用u作为分隔符标记字符串来工作的

WITH MY_DATA(str) AS
(
  SELECT 'TESTAPP_B_ABCD_JP_0_FILENAME' FROM DUAL
   UNION ALL
  SELECT 'TESTAPP1_C_1_ABCD_JP_1_FILENAME' FROM DUAL
),SPLITTED_STRING(pos,word,str) AS
(
  select level,REGEXP_SUBSTR(str, '[^_]+',1,level),str from MY_DATA
  CONNECT  BY LEVEL <= REGEXP_COUNT(str,'_')+1
  AND PRIOR sys_guid() IS NOT NULL
  AND PRIOR str = str
)
SELECT * FROM SPLITTED_STRING
WHERE word='ABCD';
为了唯一地区分每一行,我们使用sys\u guid

将帮助您开始
          POS WORD                   STR                           
--------------------------------------------------------------------------
             1 TESTAPP1              TESTAPP1_C_1_ABCD_JP_1_FILENAME 
             2 C                     TESTAPP1_C_1_ABCD_JP_1_FILENAME 
             3 1                     TESTAPP1_C_1_ABCD_JP_1_FILENAME 
             4 ABCD                  TESTAPP1_C_1_ABCD_JP_1_FILENAME 
             5 JP                    TESTAPP1_C_1_ABCD_JP_1_FILENAME 
             6 1                     TESTAPP1_C_1_ABCD_JP_1_FILENAME 
             7 FILENAME              TESTAPP1_C_1_ABCD_JP_1_FILENAME