Oracle SQL:在两个字符之间提取文本

Ani*_*ish 2 regex sql oracle substring

我有一些看起来像的字符串

{ABCDE}{F1}
{GHIJ}{K12}
Run Code Online (Sandbox Code Playgroud)

我想在第一个大括号之间提取文本

ABCDE
GHIJ
Run Code Online (Sandbox Code Playgroud)

我尝试在线搜索,但很多答案似乎都在使用函数或PL-SQL.有人可以帮我这个吗?

Tim*_*sen 7

我们可以REGEXP_SUBSTR在这里使用:

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

演示

REGEXP_SUBSTR根据这种模式,这是一种不常见的使用,它使用捕获组:

\{([^}]+)\}
Run Code Online (Sandbox Code Playgroud)

第六个参数表示返回第一个捕获组.


Chr*_*mer 6

这是老skool。我喜欢正则表达式并且可以理解它们,但是当我尝试生成它们时遇到了很多麻烦。有点像西班牙语(对我来说)。所以这只是 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
;
Run Code Online (Sandbox Code Playgroud)

演示