返回最后一个符号之后的字符串



在 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  

最新更新