Возвращает строку после последнего символа

В 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
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

select trim(regexp_substr(Report_Name, '[^>]*$')) as Report_Name

Спасибо! Это сделало это. Regex всегда ставит меня в тупик.

Michael Newcomb 10.05.2018 17:28

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

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

Другие вопросы по теме