我的字符串看起来像
{ABCDE}{F1}
{GHIJ}{K12}
我想在第一个大括号
之间提取文本ABCDE
GHIJ
我尝试在线搜索,但很多答案似乎都在使用函数或PL-SQL。有人可以帮帮我吗?
答案 0 :(得分:6)
我们可以在这里使用REGEXP_SUBSTR
:
SELECT regexp_substr('{ABCDE}{F1}', '\{([^}]+)\}', 1,1,NULL,1) AS output
FROM dual
根据这种模式,这是使用捕获组的REGEXP_SUBSTR
不太常见的用法:
\{([^}]+)\}
第六个参数表示返回第一个捕获组。
答案 1 :(得分:3)
这是旧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
;
答案 2 :(得分:1)
您可以尝试以下内容:
SELECT TRIM( '{' FROM REGEXP_SUBSTR(mystring, '\{[^}]+') )
FROM mytable;
这将从第一个开口大括号中捕获文本,但不包括结束大括号,然后从结果中修剪开始大括号。
希望这有帮助。