如何在Oracle SQL中的冒号之后和空格之前返回子字符串

我需要从冒号之后和空格之前的表列中获取子字符串。子字符串的长度可以变化,但是冒号之前和空格之后的数据长度是恒定的。

因此,我在名为“主题”的表列中的数据由5个单词组成,紧随其后是一个冒号,紧随其后的是我需要的子字符串(长度可能有所不同),然后是一个空格和一个日期。我需要的子字符串是课程名称。范例:

即将支付的课程费用:FIN / 370T 11/26/2019

即将支付的课程费用:BUS / 475 11/26/2019

即将支付的课程费用:ADMIN9 / 475TG 11/26/2019

我尝试将REGEXP_SUBSTR(COLUMN_NAME,'[^:] + $')与REGEXP_SUBSTR(COLUMN_NAME,'[^] +',1,5)一起使用,以获取之前的数据最后一个空格,但是我需要将它们结合起来。

我尝试了以下方法:

  select 
       REGEXP_SUBSTR(SUBJECT,'[^:]+$')  COURSE_ID

  from TABLE


  Result:
  FIN/370T 11/26/2019

这:

  select 
       REGEXP_SUBSTR (SUBJECT,'[^ ]+',1,5 ) COURSE_ID2          

  from TABLE

  Result: 
  Course:FIN/370T

我需要输出以返回FIN / 370T

anothermimi 回答:如何在Oracle SQL中的冒号之后和空格之前返回子字符串

简而言之:

select regexp_replace(str,'(.*:)(.*)( )(.*)$','\2') as short_course_id
  from tab

我更喜欢regexp_replace,因为有更多的可能性来提取部分字符串。

,

一个选项是

select replace(regexp_substr(str,'[^:]+$'),regexp_substr(str,'[^:][^ ]+$'),'') as course_id
  from tab

Demo

其中第一个regexp_substr()从冒号到末尾提取子字符串,第二个从最后一个空格到末尾提取子字符串。

,

如果您不希望使用正则表达式,可以使用substr和instr的组合。

select
substr(part1,1,instr(part1,' ',-1,1) ) as course,part1
from (
select
substr(<your column>,instr(<your column>,':',1) +1) as part1
from
<your table>
  ) t

Fiddle

本文链接:https://www.f2er.com/3143477.html

大家都在问