RPAD 的奇怪行为

我遇到了一些与 RPAD 相关的奇怪行为……我想我遗漏了一些明显的东西,希望有人能帮助我。

我只是想格式化一些简单的输出......并将测试用例简化为非常简单的用例:

  set serverout on
  declare
     lc_wid  CONSTANT  number := 10;
     lc_sep  CONSTANT  varchar2(10) := ' : ';
     
     lc_NOCOLOR  CONSTANT varchar2(100) := chr(27)||'[0m';
     lc_RED      CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;31m';
     lc_GREEN    CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;32m';
     lc_YELLOW   CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;33m';
  begin
     dbms_output.put_line ( lc_sep || lc_GREEN || 'test'                       || lc_NOCOLOR || lc_sep );
     dbms_output.put_line ( lc_sep             || 'test'                                     || lc_sep );
     dbms_output.put_line ( lc_sep || lc_GREEN || rpad('test',lc_wid,' ') || lc_NOCOLOR || lc_sep );
     dbms_output.put_line ( lc_sep             || rpad('test',' ')               || lc_sep );
     dbms_output.put_line ( lc_sep || lc_GREEN || rpad('testing',' ') || lc_NOCOLOR || lc_sep );
     dbms_output.put_line ( lc_sep             || rpad('testing',' ')               || lc_sep );
     dbms_output.put_line ( lc_sep || lc_GREEN || rpad('something',' ') || lc_NOCOLOR || lc_sep );
     dbms_output.put_line ( lc_sep             || rpad('something',' ')               || lc_sep );
  end;
  /

(是的,我在纠结颜色!有趣...)

这会吐出以下内容:

RPAD 的奇怪行为

如您所见,没有 RPAD 的短文本对齐良好......而带有 rpad 的较长文本对齐良好,但是,“test”和“testing”文本正在做一些“不同”的事情...... Oo

现在,如果我将 rpad 更改为用“.”填充。 .它工作正常。

  set serverout on
  declare
     lc_wid  CONSTANT  number := 10;
     lc_sep  CONSTANT  varchar2(10) := ' : ';
     
     lc_NOCOLOR  CONSTANT varchar2(100) := chr(27)||'[0m';
     lc_RED      CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;31m';
     lc_GREEN    CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;32m';
     lc_YELLOW   CONSTANT varchar2(100) := chr(27)||'[32m'||chr(27)||'[1;33m';
  begin
     dbms_output.put_line ( lc_sep || lc_GREEN || 'test'                       || lc_NOCOLOR || lc_sep );
     dbms_output.put_line ( lc_sep             || 'test'                                     || lc_sep );
     dbms_output.put_line ( lc_sep || lc_GREEN || rpad('test','.') || lc_NOCOLOR || lc_sep );
     dbms_output.put_line ( lc_sep             || rpad('test','.')               || lc_sep );
     dbms_output.put_line ( lc_sep || lc_GREEN || rpad('testing','.') || lc_NOCOLOR || lc_sep );
     dbms_output.put_line ( lc_sep             || rpad('testing','.')               || lc_sep );
     dbms_output.put_line ( lc_sep || lc_GREEN || rpad('something','.') || lc_NOCOLOR || lc_sep );
     dbms_output.put_line ( lc_sep             || rpad('something','.')               || lc_sep );
  end;
  /

RPAD 的奇怪行为

所以......似乎短文本不能与那些颜色代码和 RPAD 正常工作......但我想知道为什么? 试图了解这里发生了什么。

[编辑] 对不起,它的价值,我在 Oracle 12.1.0.2.0 中运行 [/编辑]

wanziang0723 回答:RPAD 的奇怪行为

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/8910.html

大家都在问