在 PL/SQL 中得到不正确的输出

Getting incorrect output in PL/SQL

我对 PL/SQL

中的错误感到惊讶
FCBD(i)='DEUT TRA USD RM TRAD UK, GB02DEUT40508124381319 (USD)',

dbms_output.put_line(INSTR(FCBD(i),' ',INSTR(FCBD(i),',',1,1),2));  output //48
dbms_output.put_line(INSTR(FCBD(i),',',1,1)+2);  output //26

现在我试图从第一个中减去第二个,所以输出应该是 48-26=22 但它是 26。它为每个字符串提供额外的 4,

dbms_output.put_line(INSTR(FCBD(i),' ',INSTR(FCBD(i),',',1,1),2)-INSTR(FCBD(i),',',1,1)+2);

输出 26

以上说法有什么逻辑问题?

您忘记在此处将 + 更改为 -

只需在此处修复“+2” dbms_output.put_line(INSTR(FCBD(i),' ',INSTR(FCBD(i),',',1,1),2)-INSTR(FCBD(i),',',1,1)+2); dbms_output.put_line(INSTR(FCBD(i),' ',INSTR(FCBD(i),',',1,1),2)-INSTR(FCBD(i),',',1,1)-2);

最后一个应该是-2。

a - (b+c) 应该是 a - b - c,而不是 a - b +c

如果你展示了你所做的一切,那将会有所帮助,因为 - 它对我有用。

SQL> set serveroutput on;
SQL> declare
  2    fcbd varchar2(100) := 'DEUT TRA USD RM TRAD UK, GB02DEUT40508124381319 (USD)';
  3    a varchar2(10);
  4    b varchar2(10);
  5    c number;
  6  begin
  7    a := INSTR(FCBD,' ',INSTR(FCBD,',',1,1),2);
  8    b := INSTR(FCBD,',',1,1)+2;
  9
 10    c := to_number(a) - to_number(b);
 11
 12    dbms_output.put_line('a = ' || a ||', b = ' || b);
 13    dbms_output.put_line('c = a - b = ' || c);
 14
 15    dbms_output.put_line(to_number(INSTR(FCBD,' ',INSTR(FCBD,',',1,1),2))-
 16                         to_number(INSTR(FCBD,',',1,1)+2));
 17  end;
 18  /
a = 48, b = 26
c = a - b = 22
22

PL/SQL procedure successfully completed.

SQL>

TO_NUMBER 你失踪了,我会说。不要减去strings,减去numbers。参见第 15 和 16 行。

此外,当在括号表达式前放置减号时,其中的所有符号都会 更改 因此您的 +2 变为 -2