在 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