Как получить заданное значение c из заданного положения c по substr-instr - PullRequest
0 голосов
/ 14 января 2020

У меня есть какое-то имя файла, например 'abc-type-bank-20200112-1578796204118.csv'. Я хочу получить значение 'bank' сверху, которое равно 3-е значение , если я урежу строку на '-'. Если мое имя файла похоже на abc-type-XYZ-20200112-1578796204118.csv, я должен получить 'XYZ' с 3-й позиции.

Я пытался получить по приведенному ниже коду, но он дал неправильное значение.

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);

Ответы [ 2 ]

1 голос
/ 14 января 2020

Чтобы использовать 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 <> скрипка здесь

1 голос
/ 14 января 2020

Использование двойного предлагает Oracle. В этой базе данных вы можете использовать regexp_substr():

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