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

Stored procedures 在plsql中检索句子中倒数第二个单词,stored-procedures,plsql,oracle12c,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 := subs

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

但第二个词应该检索“到的世界”,但它可以获取分析

谁能告诉我我的密码有什么问题吗

谢谢,
Dex.

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

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

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

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

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


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

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


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

我希望第一个和最后一个单词之间的所有单词都是out2@Dex哦,对不起。我会修正我的答案我想把第一个和最后一个单词之间的所有单词都记下来out2@Dex哦,对不起。我会修正我的答案