在plsql中检索第二个单词,但在句子中只有一个单词

时间:2016-04-16 19:33:38

标签: stored-procedures plsql oracle12c

我编写了一个在plsql中正确执行但是输出错误的程序。从逻辑上讲,我没有看到任何代码问题。这是代码:

begin
  inpstr := rtrim(ltrim(regexp_replace(inp,'\s{2,}','')));
  lastpos := instr(inpstr,' ',-1);
  out3 := SUBSTR(inpstr, INSTR(inpstr,' ',-1) + 1);
  pos := instr(inpstr,' ');
  out1 := substr(inpstr,1,pos);
  out2 := substr(inpstr,pos,lastpos);
end;

O / P:

dbms_output.put_line('First Word:: '||out1||' '||'Second Word:: '||out2||' '||'Lastword:: '||out3);

PROCEDURE SPLITWORDS compiled
anonymous block completed
First Word:: Welcome  Second Word::  to the world of analyti Lastword:: analytics!

但是第二个词应该“回归'世界',但它会带来分析。

有谁能告诉我我的代码有什么问题。

谢谢, 地塞米松。

2 个答案:

答案 0 :(得分:0)

substr函数的第三个参数是子字符串的长度,而不是结束字符的位置。从pos(见下文)中减去lastpos将允许您的代码正常工作。

out2 := substr(inpstr, pos, lastpos - pos);

答案 1 :(得分:0)

当您指定out2时,您至少需要从pos中减去lastPos

因为样本文本中的lastPos “欢迎来到分析世界!”将是24而pos将有8,所以来自pos 8的子字符串长度为24 ......右:“到分析世界”