如何通过 substr-instr 从特定位置获取特定值

How to get specific value from specific position by substr-instr

我有一些像 'abc-type-bank-20200112-1578796204118.csv' 这样的文件名 如果我按 '-'.
剪切字符串,我想从上面获取值 'bank',即 第三个值 如果我的文件名像 abc-type-XYZ-20200112-1578796204118.csv,我应该从第 3 个位置得到 'XYZ'

我试图通过下面的代码获取,但它给出了错误的值。

select substr(v_FILE_NAME,1,instr(v_FILE_NAME, '-') + 3) as name from (
select 'abc-type-bank-20200112-1578796204118.csv' as v_FILE_NAME from dual);

建议使用dual oracle。在该数据库中,您可以使用 regexp_substr():

select regexp_substr(filename, '[^-]+', 1, 3)
from (select 'abc-type-XYZ-20200112-1578796204118.csv' as filename from dual) x;

要使用 SUBSTR 和 INSTR 提取您想要的子字符串,您需要做类似的事情

WITH cteData AS (SELECT 'abc-type-bank-20200112-1578796204118.csv' AS FILENAME FROM DUAL),
     ctePos  AS (SELECT FILENAME,
                        INSTR(FILENAME, '-', 1, 2) AS DASH_2_POS,
                        INSTR(FILENAME, '-', 1, 3) AS DASH_3_POS
                   FROM cteData)
SELECT SUBSTR(FILENAME, DASH_2_POS + 1, DASH_3_POS - DASH_2_POS - 1) AS SUBSTR_3
  FROM ctePos

上面将从示例数据中提取子字符串'bank'

db<>fiddle here