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

新手上路,请多包涵

我有看起来像的字符串

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

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

ABCDE
GHIJ

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

原文由 Anish 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 935
2 个回答

我们可以在这里使用 REGEXP_SUBSTR

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

演示

这是 REGEXP_SUBSTR 的不太常见的用法,它使用捕获组,根据此模式:

 \{([^}]+)\}

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

原文由 Tim Biegeleisen 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

演示

原文由 Christian Palmer 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进