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

问题描述 投票:0回答:3

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

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

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

即将完成的课程的应付费用:BUS / 475 11/26/2019

即将完成的课程的应付款项:ADMIN9 / 475TG 11/26/2019

我已经尝试过将REGEXP_函数与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

sql oracle
3个回答
1
投票

简称:

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

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


0
投票

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

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

Fiddle


0
投票

一个选项是

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

Demo

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

© www.soinside.com 2019 - 2024. All rights reserved.