我需要从冒号之后和空格之前的表列中获取子字符串。子字符串的长度可以变化,但是冒号之前和空格之后的数据长度是恒定的。
因此,我的表列中名为“主题”的数据由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
简称:
select regexp_replace(str,'(.*:)(.*)( )(.*)$','\2') as short_course_id
from tab
我更喜欢regexp_replace
,因为有更多的可能性来提取部分字符串。
如果您不希望使用正则表达式,可以使用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
一个选项是
select replace(regexp_substr(str,'[^:]+$'),
regexp_substr(str,'[^:][^ ]+$'),'') as course_id
from tab
其中第一个regexp_substr()
从冒号开始到末尾提取子字符串,第二个从最后一个空格到末尾提取子字符串。