Как вернуть подстроку после двоеточия и перед пробелом в Oracle SQL - PullRequest
0 голосов
/ 07 ноября 2019

Мне нужно получить подстроку из столбца таблицы после двоеточия и перед пробелом. Длина подстроки может варьироваться, но длина данных до двоеточия и после пробела постоянна.

Таким образом, данные в столбце моей таблицы с именем «Subject» состоят из 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

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Вкратце:

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

Я предпочитаю regexp_replace, потому что есть больше возможностей для извлечения части строк.

0 голосов
/ 07 ноября 2019

Если вы не хотите связываться с регулярным выражением, вы можете использовать комбинацию 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 голосов
/ 07 ноября 2019

Один из вариантов будет

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

Демо

, где сначала regexp_substr() извлекает подстроку, начиная с двоеточия до концаи второй от последнего пробела до конца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...