拆分字符串并在oracle中查找子字符串索引
Split the string and find substrings index in oracle
我有这样的字符串
TESTAPP_B_ABCD_JP_0_FILENAME
我想要“ABCD”的索引
我试过了
select INSTR('TESTAPP_B_ABCD_JP_0_FILENAME', '_ABCD_') from dual;
它returns 10..这意味着它给我索引计算字符
我希望输出为 3(拆分字符串 TESTAPP(1),B(2),ABCD(3)
)。
请指导。
这种方法实际上是通过首先使用 _
作为分隔符
对字符串进行标记来实现的
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';
我在这里使用 CTE。 MY_DATA
的第一个表达式实际上是 table 本身的表示。第二个表达式 SPLITTED_STRING
是将列数据标记为多行。
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
为了唯一区分每一行,我们使用sys_guid()
我有这样的字符串 TESTAPP_B_ABCD_JP_0_FILENAME 我想要“ABCD”的索引 我试过了
select INSTR('TESTAPP_B_ABCD_JP_0_FILENAME', '_ABCD_') from dual;
它returns 10..这意味着它给我索引计算字符
我希望输出为 3(拆分字符串 TESTAPP(1),B(2),ABCD(3)
)。
请指导。
这种方法实际上是通过首先使用 _
作为分隔符
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';
我在这里使用 CTE。 MY_DATA
的第一个表达式实际上是 table 本身的表示。第二个表达式 SPLITTED_STRING
是将列数据标记为多行。
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
为了唯一区分每一行,我们使用sys_guid()