Sql 拆分字符串并在oracle中查找子字符串索引
我有一根这样的绳子 测试文件名 我想要ABCD的索引 我试过了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
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