如何在引号内返回字符串

时间:2019-05-09 12:13:05

标签: sql substring oracle-sqldeveloper special-characters

我正在使用Oracle SQL Developer查询数据集,并想创建一列,其中包含来自另一列中的(CLOB)的部分返回数据。

我需要的部分是用引号引起来,我已经用子字符串提取了,但是值会随着字符串的长度而变化。到达结束引号而不是指定字符串长度时,是否可以结束?

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

目前,系统会返回15个字符,但最新添加的字符会缩短,并在下一个条目中显示“”。我需要替换length属性。

我得到的结果是:

Red_Session”,

我需要输出为:Red_Session

或其他返回值,我只需要在结束引号之前将其结束。

3 个答案:

答案 0 :(得分:2)

INSTR的参数为nth(出现次数,从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

答案 1 :(得分:1)

您可以尝试使用REGEXP_SUBSTR,如下所示。或者,您可以找到报价的位置并使用下划线...

SELECT
  REGEXP_SUBSTR(a.LINETESTRESULT,
                '"([^"]*)') AS REFRESH_RAG
  FROM DUAL;

答案 2 :(得分:0)

设法使用以下代码来获取它:

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