我有一些看起来像这样的字符串
{ABCDE}{F1}
{GHIJ}{K12}
我想提取第一个花括号内的文本。
ABCDE
GHIJ
我尝试在网上搜索,但很多答案似乎都使用了函数或PL-SQL。有人可以帮我解决这个问题吗?
我们可以在这里使用REGEXP_SUBSTR
:
SELECT regexp_substr('{ABCDE}{F1}', '\{([^}]+)\}', 1,1,NULL,1) AS output
FROM dual
这是一个较少见的 REGEXP_SUBSTR
的用法,它使用了捕获组,按照以下模式进行匹配:
\{([^}]+)\}
第六个参数指定返回第一个捕获组。\}
是不必要的。 - David Faber这有点老派了。我喜欢正则表达式,可以理解它们,但是当我尝试编写它们时会遇到很多麻烦,就像对我来说的西班牙语一样。所以这只涉及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
;
SELECT TRIM( '{' FROM REGEXP_SUBSTR(mystring, '\{[^}]+') )
FROM mytable;