В Oracle у меня есть столбец в одной из наших таблиц, который показывает путь к файлу данного отчета. Однако мне просто нужно имя отчета, чтобы вернуться и использовать для подключения к другой таблице.
Столбец может быть строкой следующего вида:
Report_Name
-----------
Public >> Reports >> Division1 >> Customer Service >> ReportABC
Public >> Reports >> Division2 >> Purchasing >> Details >> ReportXYZ
Public >> Reports >> Division1 >> Purchasing >> Details >> Report Last Year
Мне всегда нужна информация после последнего ">>"
Таким образом, возвращаемые значения будут выглядеть примерно так:
Report_Name
-----------
ReportABC
ReportXYZ
Report Last Year


Предполагая, что > используется только как разделитель, вы можете:
select trim(regexp_substr(Report_Name, '[^>]*$')) as Report_Name
Используйте регулярное выражение с подвыражением или нерегулярным выражением
В решении с нерегулярным выражением я просто использую функцию instr, чтобы найти первый > (начиная с правой стороны строки) и добавить 1 к позиции. Это значение передается в функцию substr в качестве начального позиционного значения. Как и Гордон, я просто использую функцию обрезки, чтобы потом убрать места слева.
С регулярным выражением я просто использую перегруженную версию regexp_substr, которая принимает подвыражение, и я связываю имя отчета с подвыражением, помещая его в круглые скобки.
SCOTT@db>WITH smple AS (
2 SELECT
3 'Public >> Reports >> Division1 >> Customer Service >> ReportABC' pth
4 FROM
5 dual
6 UNION ALL
7 SELECT
8 'Customer Service >> ReportABC' pth
9 FROM
10 dual
11 ) SELECT
12 pth,
13 TRIM(substr(pth, (instr(pth,'>',-1) ) + 1) ) rprt_name,
14 regexp_substr(pth,'>>\s*([^>]*)$',1,1,NULL,1) rprt_name2
15 FROM
16 smple;
PTH RPRT_NAME RPRT_NAME2
----------------------------------------------------------------------------------------
Public >> Reports >> Division1 >> Customer Service >> ReportABC ReportABC ReportABC
Customer Service >> ReportABC ReportABC ReportABC
Спасибо! Это сделало это. Regex всегда ставит меня в тупик.