Oracle SQL: извлечение текста между двумя символами - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть строки, которые выглядят как

{ABCDE}{F1}
{GHIJ}{K12}

Я хочу извлечь текст в первых фигурных скобках

ABCDE
GHIJ

Я пытался искать в Интернете, но многие ответы, похоже, используют функции или PL-SQL. Может кто-нибудь помочь мне с этим?

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Вы можете попробовать что-то вроде следующего:

SELECT TRIM( '{' FROM REGEXP_SUBSTR(mystring, '\{[^}]+') )
  FROM mytable;

Это будет захватывать текст от первой открывающей фигурной скобки до, но не включая закрывающую фигурную скобку, а затем обрезать открывающую фигурную скобку из результата.

Надеюсь, это поможет.

0 голосов
/ 24 апреля 2018

Это старая школа.Я люблю регулярные выражения и могу их понять, но попадаю в ужасные неприятности, когда пытаюсь их воспроизвести.Немного похоже на испанский (для меня).Так что это просто SQL INSTR / SUBSTR / REPLACE.Я не ожидаю никаких голосов ...

WITH test_data (raw_text)
 AS 
  (SELECT '{ABCDE}{F1}' from dual UNION ALL
   SELECT '{GHIJ}{K12}' from dual 
  )
SELECT
 raw_text
,SUBSTR(raw_text,2,INSTR(raw_text,'}{')-2)              first_string
,REPLACE(SUBSTR(raw_text,INSTR(raw_text,'}{')+2),'}')   second_string
--these two from Tim's excellent answer
,regexp_substr(raw_text, '\{([^}]+)\}', 1,1,NULL,1) 
,regexp_substr(raw_text, '\{([^}]+)\}', 1,2,NULL,1)
FROM
 test_data
;

Демо

0 голосов
/ 24 апреля 2018

Мы можем использовать REGEXP_SUBSTR здесь:

SELECT regexp_substr('{ABCDE}{F1}', '\{([^}]+)\}', 1,1,NULL,1) AS output
FROM dual

Демо

Это менее распространенное использование REGEXP_SUBSTR, который использует группу захвата, в соответствии с этим шаблоном:

\{([^}]+)\}

Шестой параметр говорит, что нужно вернуть первую группу захвата.

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