我正在使用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
或其他返回值,我只需要在结束引号之前将其结束。
答案 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