首页 > 解决方案 > SQL 查询以选择两个字符之间的字符串

问题描述

我想检索两个字符之间的字符串。我有像“ Attachments:Attachments~Attachment ”这样的整个字符串,我想在:~之间取子字符串,输出的字符将是Attachments。这如何在 SQL/Oracle 选择语句中完成?

标签: sqloracle

解决方案


您可以使用该REGEXP_SUBSTR功能。从 Oracle 11g 开始,该函数有一个参数,可让您指定要返回的捕获组:

SELECT regexp_substr('Attachments:Attachments~Attachment', '\:(.+)\~', 1,1,NULL,1) from dual;

旧版本有一些解决方法(另请参阅https://stackoverflow.com/a/7759146/14015737)。您可以缩短结果:

SELECT rtrim(ltrim(regexp_substr('Attachments:Attachments~Attachment', '\:(.+)\~'),':'), '~') FROM dual;

或者

SELECT substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('Attachments:Attachments~Attachment', '\:(.+)\~') match FROM dual);

推荐阅读