在plsql中检索句子中倒数第二个单词



我写了一个程序,它在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!

但第二个词应该检索到"的世界",但它获取了分析。

有人能告诉我我的代码出了什么问题吗。

谢谢,Dex。

分配out2时,至少必须从lastPos减去pos

因为示例文本"欢迎来到分析世界!"中的lastPos将是24,pos将有8,所以pos 8中长度为24的子字符串是。。。右:"分析世界"

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

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

相关内容

  • 没有找到相关文章

最新更新