Возвращает строку после последнего символа - PullRequest
0 голосов
/ 10 мая 2018

В 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

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Использовать регулярное выражение с подвыражением или нерегулярным выражением

В случае решения с нерегулярными выражениями я просто использую функцию 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  
0 голосов
/ 10 мая 2018

Предполагая, что > используется только как разделитель, вы можете сделать:

select trim(regexp_substr(Report_Name, '[^>]*$')) as Report_Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...