Sql 如何在引号内返回字符串

Sql 如何在引号内返回字符串,sql,substring,oracle-sqldeveloper,special-characters,Sql,Substring,Oracle Sqldeveloper,Special Characters,我正在使用Oracle SQL Developer查询一个数据集,并希望在另一列中创建一个包含部分返回数据(CLOB)的列 我需要的部分是引号,我使用了substring来提取,但是值会随着字符串的长度而改变。当到达结束引号而不是指定字符串长度时,是否有方法结束 dbms_lob.substr(a.LINETESTRESULT,15,dbms_lob.instr(UPPER(a.LINETESTRESULT),'LHCRAG')+11) AS REFRESH_RAG 此时,返回15个字符,但最

我正在使用Oracle SQL Developer查询一个数据集,并希望在另一列中创建一个包含部分返回数据(CLOB)的列

我需要的部分是引号,我使用了substring来提取,但是值会随着字符串的长度而改变。当到达结束引号而不是指定字符串长度时,是否有方法结束

dbms_lob.substr(a.LINETESTRESULT,15,dbms_lob.instr(UPPER(a.LINETESTRESULT),'LHCRAG')+11) AS REFRESH_RAG
此时,返回15个字符,但最新添加的字符较短,并显示下一个条目的“.”。我需要替换长度属性

我得到的结果是:

红色会议“

我需要输出为:Red_Session


或者不管返回值是什么,我只需要它在结束引号之前结束。

您可以尝试下面的REGEXP\u SUBSTR。或者,您可以找到报价的位置并使用substr

SELECT
  REGEXP_SUBSTR(a.LINETESTRESULT,
                '"([^"]*)') AS REFRESH_RAG
  FROM DUAL;
INSTR有一个参数N(出现次数,从1开始)。有了这个,你可以创建类似这样的东西

dbms_lob.substr(a.LINETESTRESULT,dbms_lob.instr(a.LINETESTRESULT, '"', 1, 2) - dbms_lob.instr(a.LINETESTRESULT, '"') - 1, dbms_lob.instr(a.LINETESTRESULT, '"') + 1) AS REFRESH_RAG

已使用以下代码成功获取此信息:

SELECT
dbms_lob.substr(UPPER(a.LINETESTRESULT), dbms_lob.instr(UPPER(a.LINETESTRESULT), '"', 
dbms_lob.instr(UPPER(a.LINETESTRESULT), 'LHCRAG') + 11) - 
(dbms_lob.instr(UPPER(a.LINETESTRESULT), 'LHCRAG') + 11), 
dbms_lob.instr(UPPER(a.LINETESTRESULT), 'LHCRAG') + 11)
AS REFRESH_RAG

提示:regexp_substri添加了代码,稍作修改以选择起点,它似乎返回了正确的结果,除了一个示例之外——只需测试更多的dbms_lob.substr(a.LINETESTRESULT,dbms_lob.instr(a.LINETESTRESULT,“,”,1,2)-dbms_lob.instr(a.LINETESTRESULT,“,”)+1,dbms_lob.instr(a.LINETESTRESULT,'LHCRAG'))+11)如图所示